find . -type f -print
drukuje
./file1
./file2
./file3
Każdy sposób na wydrukowanie
file1
file2
file3
?
f=`find . -name migration`; echo ${f/.\//}
find . -type f -print
drukuje
./file1
./file2
./file3
Każdy sposób na wydrukowanie
file1
file2
file3
?
f=`find . -name migration`; echo ${f/.\//}
Odpowiedzi:
Jeśli znajdują się tylko w bieżącym katalogu
find * -type f -print
Czy tego chcesz?
-print
wymagane? Dało ten sam wynik bez tej flagi.
Znajdź tylko zwykłe pliki w bieżącym katalogu i wydrukuj je bez ./
przedrostka „ ”:
find -type f -printf '%P\n'
Od znalezienia człowieka, opis -printf
formatu:
% P Nazwa pliku z nazwą argumentu wiersza poleceń, pod którym została znaleziona, została usunięta.
find
obsługuje -printf
(nie wszystkie).
\0
zamiast, \n
jeśli chcesz to xargs -0
find -type f -printf '%P\0' | xargs -0 head
brew install findutils
;)
Użyj sed
find . | sed "s|^\./||"
find -exec
?
find -exec sh -c "echo {} | sed 's|^\./||'" \;
lub find -exec sh -c "sed 's|^\./||' <<< '{}'" \;
może być krótszy
find * -type f
2> /dev/null
zignorować błąd zgłaszany, gdy polecenie jest uruchamiane w pustym katalogu.
Inny sposób na usunięcie ./
find * -type d -maxdepth 0
Ponieważ -printf
opcja nie jest dostępna na OSX, find
tutaj jest jedno polecenie, które działa na OSX find, na wypadek, gdyby ktoś nie chciał zainstalować gnu find
za pomocą brew
itp:
find . -type f -execdir printf '%s\n' {} +
find . -type f -exec bash -c 'for f; do echo "${f#./}"; done' {} +
-exec /path/to/myscript.sh {}
w swoimfind
,-printf '%P\n'
nie działa. Zamiast tego muszę zrobić./
prefiks w skrypcie przez:p=${1#"./"}