Jak przenieść niektóre pliki do katalogu nadrzędnego?


13

Chcę wyciągnąć wszystkie pliki mp3, które przypadkowo zostały umieszczone w folderze flac z tego folderu nadrzędnego.

Nie powinno mieć znaczenia, jak głębokie są foldery, chcę tylko przenieść pasujące pliki dokładnie o jeden katalog w górę.

Oto jak wybieram moje pliki:

find . -path "*/flac/*" -name '*.mp3'

To działa z mojego folderu z muzyką, ale utknąłem tutaj. Wszystkie rozwiązania, które znalazłem, albo przenieś pliki do rodzica bieżącego folderu, albo wymagają pewnej stałej struktury.

Odpowiedzi:


24

Próbować:

find . -path "*/flac/*" -name '*.mp3' -execdir mv -t ../ {} +

Jak to działa

  1. find .

    Uruchom polecenie find działające w bieżącym katalogu.

  2. -path "*/flac/*"

    Wybierz tylko pliki z flacich ścieżką

  3. -name '*.mp3'

    Wybierz tylko pliki z rozszerzeniem .mp3.

  4. -execdir mv -t ../ {} +

    W przypadku wszystkich znalezionych plików uruchom mvpolecenie z katalogu, w którym znajduje się plik, i przenieś plik do katalogu nadrzędnego.

    Oprócz uproszczenia tego konkretnego zadania, opcja -execdirjest również bezpieczniejsza niż -execopcja tradycyjna .

Uproszczenie

find . -path "*/flac/*.mp3" -execdir mv -t ../ {} +

1
Ładny! Robi dokładnie to, czego chcę.
Marcel

Czy + jest alternatywą dla rytualistycznych \; ?
rackandboneman

@ Johnn1024 przy założeniu, że nie ma zagnieżdżonych katalogów o takiej samej flacścieżce, jak w */flac/flac/x.mp3przeciwnym razie x.mp3plik przesunie się o dwa poziomy w górę.
αғsнιη

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.