Перемещение нескольких файлов в подкаталогах (и / или разбиение строк по многоканальному разделителю) [bash]

В общем, у меня есть папка с кучей подпапок, в которой более 100 файлов. Я хочу взять все файлы mp3 (действительно общее расширение, так как мне придется делать это с jpg и т. Д.) И переместить их в новую папку в исходном каталоге. Итак, в основном структура файла выглядит следующим образом:

/.../dir/recup1/file1.mp3

/.../dir/recup2/file2.mp3

... так далее.

и я хочу, чтобы это выглядело так:

/.../dir/music/file1.mp3

/.../dir/music/file2.mp3

... так далее.

Я решил использовать bash-скрипт, который выглядит так:

#!/bin/bash
STR=`find ./ -type f -name \*.mp3`

FILES=(echo $STR | tr ".mp3 " "\n")

for x in $FILES
do
    echo "> [$x]"
done

У меня просто пока есть эхо, но в конце концов я бы хотел использовать mv чтобы получить его в нужную папку. Очевидно, что это не работает, потому что tr рассматривает каждый символ как разделитель, поэтому, если у вас, ребята, есть идея получше, я буду признателен.

(К вашему сведению, я использую нетбук Ubuntu, так что если есть GUI-интерфейс, похожий на поиск Windows, я не буду против его использования)

2 ответа

Решение

Если music папка существует, тогда должно работать следующее:

find /path/to/search -type f -iname "*.mp3" -exec mv {} path/to/music \;

-exec command должен быть завершен с ; (так что вам обычно нужно набрать \; или же ';' чтобы избежать интерпретации оболочкой) или +, Разница в том, что с ;, команда вызывается один раз для файла, с +, он вызывается как можно меньше раз (обычно один раз, но максимальная длина командной строки, поэтому она может быть разделена) со всеми именами файлов.

Вы можете сделать это так:

find /some/dir -type f -iname '*.mp3' -exec mv \{\} /where/to/move/ \;

\{\} часть будет заменена найденным именем файла / путем. \; часть устанавливает конец для -exec часть, это не может быть пропущено.

Если вы хотите распечатать найденное, просто добавьте -print пометить как:

find /some/dir -type f -iname '*.mp3' -print -exec mv \{\} /where/to/move/ \;

НТН

Другие вопросы по тегам