Как переместить некоторые файлы в родительский каталог?

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 ../ {} +
John1024
источник
1
Ницца! Делает именно то, что я хочу.
Марсель
Является ли + альтернатива для ритуала \; ?
rackandboneman
@ Johnn1024 при условии, что нет вложенных каталогов с таким же flacпутем, как в */flac/flac/x.mp3противном случае x.mp3файл переместится на два уровня вверх.
αғsнιη