Przyjrzałem się innym podobnym pytaniom, ale nie znalazłem takiego, które pozwoliłoby mi zrozumieć koncepcję i zastosować ją do mojej sytuacji w oparciu o mój ograniczony czas. Po prostu uruchamiam polecenie wyszukiwania, aby znaleźć określone pliki, ale niektóre pliki w podkatalogach mają tę samą nazwę, którą chcę zignorować. Dzięki za wszelką pomoc. Poniżej znajduje się polecenie, którego używam:
Interesujące mnie pliki / wzorzec: / dev / abc-scanner, / dev / abc-cash ....
Komenda:
find /dev/ -name 'abc-*'
Co jest zwracane:
/dev/abc-scanner
/dev/abc-cash
...
...
...
/dev/.udev/names/abc-scanner
/dev/.udev/names/abc-cash
Chcę zignorować te ostatnie pliki: /dev/.udev / ...
Odpowiedzi:
Jeśli chcesz tylko ograniczyć znajdowanie do pierwszego poziomu, możesz zrobić:
find /dev -maxdepth 1 -name 'abc-*'
... lub jeśli szczególnie chcesz wykluczyć
.udev
katalog, możesz zrobić:find /dev -name '.udev' -prune -o -name 'abc-*' -print
źródło
xargs
zamiast tego, więc coś w stylu:find /dev -maxdepth 1 -name 'abc-*' | xargs ls -l
ale jeśli jest jakaś szansa, że będą mieli spacje w nazwach, powinieneś to zrobićfind /dev -maxdepth 1 -name 'abc-*' -print0 | xargs -0 ls -l
ls -l /dev/abc-*
for x in /dev/abc-*; do readlink -f $x; done
ls -l /dev/abc-* /dev/*/abc-* | fgrep -v /dev/.udev
... z wyjątkiem tego , że przynajmniej na moim Linuksie/dev/*/*
nie zawiera plików,/dev/.udev/*
więc możesz pominąć rozszerzeniefgrep -v
.Czy jest jakiś szczególny powód, dla którego musisz użyć
find
? Możesz po prostu użyć,ls
aby znaleźć pliki, które pasują do wzorca w katalogu.Jeśli musisz użyć
find
, możesz użyć-maxdepth 1
przełącznika, aby zastosować tylko do określonego katalogu.źródło
-maxdepth 1
raczej niż-maxdepth 0
ls
. Możesz znaleźć te same pliki za pomocąecho
lubwc
lub tego, co masz, ponieważ powłoka rozszerza dla ciebie symbol wieloznaczny. Więcfor file in /dev/abc-*; do something with each "$file"; done
może właśnie tego szuka OP.find
go nie ma.ls
jest zbędne.for f in abc*; ...
to wszystko czego potrzebujesz.To może zrobić, co chcesz:
find /dev \( ! -name /dev -prune \) -type f -print
źródło
Dotarłem tutaj z nieco bardziej ogólnym problemem - chciałem znaleźć pliki w katalogach pasujących do wzorca, ale nie w ich podkatalogach.
Moje rozwiązanie (zakładając, że szukamy wszystkich
cpp
plików znajdujących się bezpośrednio warch
katalogach):find . -path "*/arch/*/*" -prune -o -path "*/arch/*.cpp" -print
Nie mogłem użyć maxdepth, ponieważ ograniczało ono przede wszystkim wyszukiwanie i nie znałem nazw podkatalogów, które chciałem wykluczyć.
źródło
find /dev -maxdepth 1 -name 'abc-*'
Nie działa dla mnie. Nic nie zwraca. Jeśli po prostu to zrobię ”. daje mi wszystkie pliki w katalogu poniżej tego, nad którym pracuję.
find /dev -maxdepth 1 -name "*.root" -type 'f' -size +100k -ls
Nic nie zwracaj z „.” zamiast tego otrzymuję listę wszystkich „dużych” plików w moim katalogu, a także katalog rootfiles /, w którym przechowuję stare.
Kontynuacja. To działa.
find ./ -maxdepth 1 -name "*.root" -type 'f' -size +100k -ls 564751 71 -rw-r--r-- 1 snyder bfactory 115739 May 21 12:39 ./R24eTightPiPi771052-55.root 565197 105 -rw-r--r-- 1 snyder bfactory 150719 May 21 14:27 ./R24eTightPiPi771106-2.root 565023 94 -rw-r--r-- 1 snyder bfactory 134180 May 21 12:59 ./R24eTightPiPi77999-109.root 719678 82 -rw-r--r-- 1 snyder bfactory 121149 May 21 12:42 ./R24eTightPiPi771098-10.root 564029 140 -rw-r--r-- 1 snyder bfactory 170181 May 21 14:14 ./combo77v.root
Najwyraźniej
/dev
oznacza katalog zainteresowania. Ale./
jest potrzebny, a nie tylko.
. Potrzeba tego/
nie była oczywista nawet po tym, jak zorientowałem się, co/dev
znaczy mniej więcej.Nie mogłem odpowiedzieć jako komentarz, ponieważ nie mam „reputacji”.
źródło