Nie znam jeszcze wszystkich sztuczek grep/find/awk/xargs
.
Powiedzmy, że mam kilka plików pasujących do określonego wzorca *.xxx
. Te pliki znajdują się w losowych miejscach w określonym katalogu. Jak mogę znaleźć wszystkie takie pliki i przenieść je do folderu w moim katalogu domowym w systemie Unix (który może jeszcze nie istnieć)?
Odpowiedzi:
źródło
mv -i -t ~/dst {} +
Jeśli chcesz przenieść wszystkie pliki w hierarchii katalogów do jednego katalogu docelowego, w bash ≥4 (wstaw
shopt -s globstar
w swoim~/.bashrc
) lub zsh:W innych muszlach:
Jak odczytać to
find
polecenie:.
: przeglądaj bieżący katalog-name '*.xxx'
: działają na plikach, których nazwa pasuje do tego wzorca-exec … \;
: wykonaj to polecenie dla każdego pliku, zastępując{}
ścieżkę do plikuIstnieje bardziej złożone polecenie,
find
które jest szybsze, jeśli masz wiele plików, ponieważ nie trzeba wywoływać osobnegomv
procesu dla każdego pliku:Na
+
końcufind
znajduje się polecenie uruchomienia polecenia na wielu plikach jednocześnie. Ponieważfind
nazwy plików mogą znajdować się tylko na końcu wiersza poleceń, amv
katalog docelowy musi być na końcu, używamy powłoki pośredniej do zmiany kolejności argumentów ("$0"
jest to pierwszy argument powłoki~/new-directory
i"$@"
są to kolejne argumenty pochodzące zfind
rozszerzenie{}
).źródło
Jeśli chcesz zreplikować strukturę katalogów pasujących plików źródłowych do nowego katalogu docelowego, możesz skorzystać z opcji --parents GNU cp :
źródło
można użyć find bez
-exec
, a także:źródło
find -exec
jest to znacznie bezpieczniejsze; powyższe nie powiedzie się na przykład w nazwach plików zawierających białe znaki.