find . -type d
bir başlangıç noktasının altındaki tüm dizinleri bulmak için kullanılabilir. Ancak .
istenmeyen geçerli dizini ( ) de döndürür . Nasıl hariç tutulabilir?
find . -type d
bir başlangıç noktasının altındaki tüm dizinleri bulmak için kullanılabilir. Ancak .
istenmeyen geçerli dizini ( ) de döndürür . Nasıl hariç tutulabilir?
Yanıtlar:
find . ! -path . -type d
Bu özel durum için ( .
), golf daha iyi mindepth
çözüm (24 vs 26 karakter), ancak bu muhtemelen nedeniyle yazmak biraz daha zor !
.
Diğer dizinleri hariç tutmak için, bu daha az iyi golf ve DRYness için bir değişken gerektirir:
D="long_name"
find "$D" ! -path "$D" -type d
Benim karar ağacı arasına !
ve -mindepth
:
!
Taşınabilirlik için kullanın ..
? Bozuk para atın.long_name
? Kullanın -mindepth
.find / ! -regex '/\(a\|b\)/.*'
ya da daha basit bir şekilde grep ile boru oluşturabilirsiniz. Yinelememek için, yukarıdakiler çok verimsiz olacaktır ve şunu kullanmalısınız -prune
: stackoverflow.com/questions/1489277/…
find
ile kullanıyordum grep
ama üst dizin hala orada, her şey yine de silinmesine neden oldu.
find
, önekleri kontrol etmeniz gerekir: stackoverflow.com/questions/17959317/… Ama döngü için bir Bash halledebilir :-)
\!
) güvenli tarafta olmaktan kaçmak istersiniz . Makinemdeki tüm örnekler man find
kaçtı, bu yüzden muhtemelen bir Good Idea ™ gibi görünüyor. Edit - Sadece açıkça açıkça diyor ki:! expr True if expr is false. This character will also usually need protection from interpretation by the shell.
Sadece özyineleme derinliği parametre find
tarafından kontrol edilemez -maxdepth
, derinlik ilgili -mindepth
parametre kullanılarak “üst” ten sınırlandırılabilir . Yani birinin ihtiyacı olan şey:
find . -mindepth 1 -type d
find . -mindepth 1 -maxdepth 1 -type d ...
Kullandığım find ./* <...>
ben (birinci düzey dotfiles görmezden umursamıyorum zaman *
glob bash varsayılan olarak bu eşleşmiyor - shopt yerleşiğinin içinde 'dotglob' seçeneğini bkz: https://www.gnu.org/software/bash /manual/html_node/The-Shopt-Builtin.html ).
eclipse tmp # bul. . ./ekran ./screen/.testfile2 ./.X11-unix ./.ICE-unix ./tmux-0 ./tmux-0/default
eclipse tmp # find ./* ./ekran ./screen/.testfile2 ./tmux-0 ./tmux-0/default
-exec
seçeneği ile kullanmayın . Örneğin, denerseniz find dir/* -type d -exec rmdir {} \;
, hatalar görürsünüz.
rmdir
ve büyük olasılıkla dizinlerin boş olmadığını söylüyorlar, çünkü dizinlerde find
derinlemesine bir arama yapacak ve ebeveynleri çocuklarından önce gösterecektir.
Peki, basit bir çözüm de (çözüm benim için git git bash'da çalışmıyordu)
find * -type d
Çok performanslı olmayabilir, ancak işi yapar ve bazen ihtiyacımız olan şey budur.
[Düzenle]: @AlexanderMills'in açıkladığı gibi, kök konumda ./.hidden
gizli dizinleri göstermez (örn. ./folder/.hiddenSub
) , Ancak gizli alt dizinleri gösterir (örn. ). [Pencerelerde git bash ile test edildi]
find /path/ ! -path "/path/first" ! -path "/path/second"
, bu tek yol mu?