Potrzebuję polecenia unix dla następujących elementów:
Struktura katalogów
/project
/images
/products
/cup.jpg
/laptop.jpg
/designs
/alpha.jpg
/beta.jpg
/gamma.jpg
/team
/jeff.jpg
/locations
/new-york.jpg
Chciałbym, aby jedno polecenie kopiowało rekursywnie wszystkie pliki *, a nie foldery z katalogu „images” do czegoś takiego.
/assets
/cup.jpg
/laptop.jpg
/alpha.jpg
/beta.jpg
/gamma.jpg
/jeff.jpg
/new-york.jpg
Próbowałem tego, ale tylko rekursywnie skopiowałem foldery cp -r ./project/images/* ./assets/
find project -type f -exec cp {} assets \;
{}
, abyś nie miał problemów z nazwami plików ze spacjami:find project/images -type f -exec cp '{}' assets \;
Odpowiedzi:
Wykonuje to cp dla każdego pliku, więc może być zauważalnie wolniejsze, jeśli istnieje wiele małych plików (ale nie z typowymi obrazami):
To wymaga wielu argumentów jednocześnie:
Bez -0 nazw plików zawierających pojedyncze cudzysłowy lub podwójne cudzysłowy spowodowałoby błąd podobny do
xargs: unterminated quote
.Bash 4 obsługuje
**
zshopt -s globstar
:źródło