Yalnızca yolsuz find komutundan adlar nasıl alınır


14

Sadece kullanarak arama sonucundan isimleri almaya çalışıyorum, ama her zaman da dizinleri içerir. Find kullanarak yalnızca adları nasıl yazdırabilirim (veya bir değişkene atayabilirim)

find trunk/messages/ -name "*.po" -printf '%f\n'

benzer bir komutu daha sonra kullanmak üzere bir değişkene atamak için, örneğin "kaynak".

EDIT: Ve mümkünse sadece uzantı hariç adı.

Yanıtlar:


20

kullanım find trunk/messages/ -name "*.po" -exec basename {} .po \;

Örnek ve açıklamalar:

Bazı test dosyaları oluşturun:

$ touch test1.po  
$ touch test2.po  
$ find . -name "*.po" -print
./test1.po  
./test2.po

Tamam, yol da dahil olmak üzere dosyalar bulunur.

Her sonuç için basename, ismin .po kısmını yürütün ve soyun

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2

Çok teşekkürler :). Yalnızca PO uzantısını dirseklerden çıkarabilir miyim? Yani: dir1 / po1.po ve dir2 / po2.po dir1 / po1 ve dir2 / po2 gibi olabilirler mi?
uyandırma

@ user1754665find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
slhck

@slhck teşekkürler. son olarak dosya adını uzantısız ve içinde bulunduğu son klasörü almalıyım: örneğin: dir1 / subdir1 / subsubdir1 / po1.po ve dir2 / subdir2 / subsubdir2 / po2.po gibi bir değişkene ayarlanmalıdır: subsubdir1 / po1 sırasıyla sububdir2 / po2.
uyandırma

@ user1754665 Hmm, belkifind . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
slhck

@Hennes Son açılış kıvırcık ayraç önce ters eğik çizgi amacı nedir find?
Utku

3

-execdirDosyayı yol olmadan yazdıracak bir parametre kullanabilirsiniz , örneğin:

find . -name "*.po" -execdir echo {} ';'

Uzantısız dosyalar:

find . -name "*.txt" -execdir basename {} .po ';'

Not: POSIX olmadığından, BSD findtemiz dosya adları basacaktır, ancak GNU kullanmak findfazladan yazdıracaktır ./.

Bkz: GNU find -execdir komutu neden BSD bulmasından farklı davranıyor?


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.