Jak mogę znaleźć tylko pliki * .mp3 za pomocą polecenia rekurencyjnego, np. ls -R *.mp3
W katalogu zawierającym kilka podkatalogów, a na koniec skopiować te pliki do wybranego przeze mnie katalogu.
Dziękuję za wsparcie.
command-line
V 3 L 3 N 0
źródło
źródło
find /path/to/dir/ -name '*.c' | xargs cp -t /target/
xargs
jest zwykle znacznie szybszy. Właśnie uruchomiłem szybki test, znajdując ładunek plików c i uruchomiłemls -l
je. Jest 0m2.420s dlaxargs
i 0m25.494s dla-exec
... Oczywiście w tym przypadkucp
operacja zajmie większość czasu, więc prawdopodobnie nie ma to znaczenia, ale warto o tym pamiętać.-n`` switch to the
Poleciłbym dodanie polecenia cp`, aby uniknąć zastąpienia w przypadku zduplikowanych nazw (lub napisanie skryptu, który sprawdza duplikaty przed skopiowaniem i w razie potrzeby zmianę nazwy celu)Jest też inny sposób, aby to zrobić, który moim zdaniem będzie idealnie pasował do twojego celu. Można łączyć
find
zwhile
pętli i nawet nie trzeba użyć jednej zexec
lubxargs
w ogóle. Jeśli na przykład chcesz skopiować swójmp3s
folder z folderu pobierania do folderu z muzyką, skorzystaj z następującego skryptu, z którego korzystałem wiele razy.Możesz go zmodyfikować, jak chcesz, zmieniając katalogi, które
find
wyszukują i umieszczają pliki wynikowe; jeśli nie podano żadnego katalogu,find
przeszuka cały folder domowy. Możesz także zmienićcp
namv
lub inne polecenia. Jest dość szybki, ponieważ właśnie przetestowałem go z 3945.jpg
plikami! Skopiuj go do edytora tekstowego, zapisz, a następnie uruchom go, uruchamiającchmod +x myscript
.Na tej zauważonej wiki Bash pokazano, jak przydatne jest połączenie
while
pętli iread
poleceń w celu przetworzenia wynikufind
polecenia; a sposób, w jaki to zrobiłem, zapewnia, że skrypt nie ulegnie awarii, jeśli natrafi na nazwy plików ze spacjami lub innymi nieoczekiwanymi lub specjalnymi znakami.Aby uzyskać bardziej ogólne informacje na temat
find
polecenia, wpisz w terminaluman find
lub zobacz strony Ubuntu online . Świetne wprowadzenie do użycia funkcji find znajduje się również w tym artykule .źródło
find ~/Downloads -type f -iname '*.mp3' | while read mp3file; do cp "$mp3file" ~/Music; done
prostsze?-n`` switch to the
Poleciłbym dodanie polecenia cp`, aby uniknąć zastąpienia w przypadku zduplikowanych nazw (lub napisanie skryptu, który sprawdza duplikaty przed skopiowaniem i w razie potrzeby zmianę nazwy celu)