Jak mogę przenosić pliki według typu rekurencyjnie z katalogu i jego podkatalogów do innego katalogu?


30

Jaki byłby dobry sposób na przeniesienie typu pliku z katalogu i wszystkich jego podkatalogów?

Jak „przenieś wszystko * .ogg do / thisdir rekurencyjnie do / somedir”. Próbowałem kilku rzeczy; moim najlepszym wysiłkiem było (wciąż niezbyt wielkie):

find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \;

Wracał w każdym wierszu przed każdą nazwą pliku,

mv: cannot overwrite non-directory `/thisdir/*.ogg' with directory `/somedir'

Odpowiedzi:


23

można użyć znalezienia z xargs do tego

find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -Imysongs mv -i mysongs /somedir

-I w powyższym poleceniu mówi xargsowi, jakiego ciągu zastępczego chcesz użyć (w przeciwnym razie dodaje argumenty na końcu polecenia).

LUB
W swoim poleceniu po prostu spróbuj przenieść „{}” po mvpoleceniu.

find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;


1
nie zapomnij zrobić kopii zapasowej przed wypróbowaniem powyższych poleceń :-).
Hemant

2
Btw, dla pierwszego -print0 dla find i -0 dla xargs powinno być używane jak to możliwe, aby uniknąć białych znaków w problemach z nazwami plików.
maxschlepzig

@maxschlepzig: dobry punkt. Będę edytować.
Hemant

2
Zdecydowanie sugeruję użycie mv -itutaj, abyś nie ryzykował nadpisywania plików, jeśli wydarzy się coś nieoczekiwanego.
Gilles „SO- przestań być zły”

2
z mv z podstawowych narzędzi GNU możesz użyć mv -t <targetdir>+ i zamiast \;

10
find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;

W pewnym sensie wymieniłeś argumenty na mv


9

W Zsh lub Bash 4, aby zebrać wszystkie *.oggpliki w /somedir:

mv /thisdir/**/*.ogg /somedir

Jeśli chcesz odtworzyć hierarchię katalogów: (ostrzeżenie wpisane bezpośrednio w przeglądarce)

rsync -a --prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir

poza dogodnym w bash
Mark
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.