Bash kullanarak farklı bir dizindeki belirli dosyaları nasıl seçerim?


13

Aşağıdaki gibi bir dizindeki belirli dosyaları listelemek (veya silmek veya başka bir işlem yapmak) istiyorum:

$ ls /opt/somedir/
aa  bb  cc  aa.txt  bb.txt  cc.txt
$ ls /opt/somedir/(aa|bb|cc)  ## pseudo-bash :p
aa  bb  cc

Bunu nasıl başarabilirim (önce dizine cd-ing olmadan)?

Yanıtlar:



3

Bash altında çalıştırın shopt -s extglob(veya içine koyun ~/.bashrc) ve olağandışı bir sözdizimi (ksh'den devralınan) ile düzenli ifadeler sağlayan ek desenler kullanabilirsiniz . Bu kalıpları elbette ksh'da ve sonra da zsh'de kullanabilirsiniz setopt ksh_glob.

$ shopt -s extglob
$ ls /opt/somedir/@(aa|bb|cc|doesnotexist)
/opt/somedir/aa   /opt/somedir/bb  /opt/somedir/cc

Zsh'de doğrudan (foo|bar)desen olarak kullanabilirsiniz .

% ls /opt/somedir/(aa|bb|cc|doesnotexist)
/opt/somedir/aa   /opt/somedir/bb  /opt/somedir/cc

Komutun tam yolla çağrıldığını unutmayın. Komutu kısa bir yolla çağırmak istiyorsanız, dizini bir şekilde değiştirmeniz gerekir ve (cd /opt/somedir && somecommand aa bb cc)bu en kolay yoldur.


Eğer yakından bakarsanız, benim sorum "ilk dizine cd-ing olmadan" belirttiğiniz göreceksiniz;)
neu242

1

Şunu kullanarak filtre uygulayabilirsiniz egrep:

ls | egrep '(aa|bb|cc)'

Tüm metin dosyalarını bulmak için:

ls | egrep '(aa|bb|cc).txt'

1
dot her karakterle eşleşir ve bu yaklaşım bu dosyalar üzerinde daha fazla işlem yapmayı zorlaştırır
enzotib

1
Ben de ls sadece örnek bir komut olduğunu hissediyorum.
Random832

Evet, haklısın, bir işlem yapmak istediğimi belirttim: dosyaları listelemek sadece bir örnekti.
neu242

İyi yorumlar sevgili dostlar, teşekkürler. İyi şanslar neu242: D
Okyanus

1

İlk olarak sizi yönlendiriyorum: Asla ayrıştırmayın , asla . İstediğinizi yapmanın uygun ve kanonik yolu bulmaktır .

Örneğin:

find /opt/somedir -regex '.*[aa|bb|cc].*' -exec mv '{}' ~/backup \;

Genellikle kullanmak -nameyerine -regexdaha basit olduğu gibi. Ancak bir normal ifade kullanım durumunuza uyar. Taşınmasını / silinmesini istediğiniz dosyalar olduklarından emin olmak için komutu ilk kez kullanmadan çalıştırmalısınız -exec.


Asla ayrıştıracağımı söylemedim ve Rush'ın çok daha iyi bir cevabı vardı. Denediğin için teşekkürler :)
neu242
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.