Як перемістити деякі файли в їх батьківський каталог?


13

Я хочу витягнути всі mp3-файли, які випадково були поміщені в папку flac з неї, до їх батьківської папки.

Не має значення, наскільки глибокі папки, я просто хочу перемістити відповідні файли точно на один каталог вгору.

Ось як я вибираю свої файли:

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

Це працює з моєї музичної папки, але я тут застряг. Усі знайдені нами рішення або переміщують файли до батьківської поточної папки, або вимагають певної фіксованої структури.

Відповіді:


24

Спробуйте:

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

Як це працює

  1. find .

    Запустіть команду find, що працює над поточним каталогом.

  2. -path "*/flac/*"

    Виберіть лише файли, які мають flacна своєму шляху

  3. -name '*.mp3'

    Виберіть лише файли з розширенням .mp3.

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

    Для будь-яких знайдених файлів запустіть mvкоманду з каталогу, в якому знаходиться файл, і перемістіть файл у батьківський каталог.

    Окрім спрощення цієї конкретної задачі, варіант -execdirтакож є більш безпечним, ніж традиційний -execваріант.

Спрощення

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

1
Приємно! Робить саме те, що я хочу.
Марсель

Чи є + альтернативою ритуалістичному \; ?
rackandboneman

@ Johnn1024 припускаючи, що немає вкладених каталогів з однаковим flacшляхом, як */flac/flac/x.mp3інакше x.mp3файл переміститься на два рівні вгору.
αғsnιη

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.