Я хочу сделать резервную копию только моих музыкальных папок FLAC. Файлы FLAC могут быть вложены в папки следующим образом:
AlbumName/
├── Files/
│ ├── someSong01.flac
│ ├── someSong02.flac
├── Covers/
│ ├── someCover01.jpg
│ └── someCover02.jpg
Как скопировать и переместить все папки AlbumName с соответствующей структурой и содержимым, которые содержат где-то внутри хотя бы один файл FLAC (я предполагаю, что этого достаточно, чтобы сказать: музыка в формате FLAC)
РЕДАКТИРОВАТЬ: FLAC файлы могут быть вложенными; так что я могу иметь:
AlbumName2/
├── someSong01.flac
├── someSong02.flac
├── Covers/
│ ├── someCover01.jpg
| └── someCover02.jpg
И я хочу скопировать эти папки со всем их содержимым, а не только файлы FLAC, и вставить в другой каталог.
Так что, если у меня есть, а
AlbumName3/
├── someSong01.mp3
├── someSong02.mp3
├── Covers/
│ ├── someCover01.jpg
| └── someHiddenSong.flac
и
AlbumName4/
├── Files/
│ ├── someSong01.mp3
│ ├── someSong02.mp3
├── Covers/
│ ├── someCover01.jpg
│ └── someCover02.jpg
Я хочу рекурсивно cp в другой каталог AlbumName, AlbumName2 и AlbumName3, но не AlbumName4
РЕДАКТИРОВАТЬ: Ни один из ответов на самом деле не делал то, что я хочу, поэтому я в конечном итоге использовал что-то вроде этого:
find -mindepth 2 -name '*.flac' -exec dirname {} \; | awk -F "/" '{print $2}' | sort -u | while read -r dirname; do cp -r "$dirname" "backup/"; done
в основном я перечисляю все файлы flac, извлекаю корневую папку с помощью awk, удаляю дубликаты и делаю что хочу
источник
Ответы:
Можно использовать rsync, который копирует только файлы flac и сохраняет структуру каталогов:
источник
привет мой друг, ты можешь использовать
источник
--parents
раньше!*/*.flac
! Будетcp -r --parents AlbumName/ newdirectory/
не хватать?shopt -s globstar
), а затем использовать**/*.flac
для glob. Двойная звезда будет соответствовать нулю или более каталогов.Хорошие ответы
Я хочу добавить еще один способ, вы также можете использовать комбинацию find и cpio
find . -name "*.flac" -print0|cpio --null -pdm destination/
Можно также использовать
rsync
или написать сценарий оболочки для поиска и копирования файлов со структурой каталогов.источник
Ответ 1: Вы также можете использовать
find
команду для того же.Explaination:
mkdir
создает новый каталог.find
Команда находит*.flac
файлы, расположенные вAlbumName
папке.exec
Команда выполняетcp
команду для каждого имени файла,find
который вернулся.Ответ 2: Вы также можете использовать
find
команду сxargs
аБольше информации: найди , xargs
источник
find | xargs
будет ломаться на имена файлов с пробелами, вместо этого используйтеfind -print0 | xargs -0
.1 2.flac
файлом, который имеет место в имени файла. Можете ли вы дать мне знать имя файла, в котором происходитfind | xargs
сбой?find -print0 | xargs -0
touch "a space" && find . | xargs ls
.Просто пришлось решить ту же проблему для моей музыкальной библиотеки и решить ее, используя следующий адаптированный скрипт. Я не полностью разработал его с помощью переменных, так как собираюсь использовать его только один раз :).
Сценарий перемещает каждый каталог, содержащий файлы flac, включая все остальные файлы и подкаталоги, в новое место с помощью rsync. rsync позволяет вам возобновить выполнение сценария, если он остановился во время процесса.
Моя структура библиотеки:
Новая структура библиотеки:
(1) запустите следующий сценарий оболочки в месте назначения SOURCE (замените TARGET на соответствующий каталог по вашему выбору - я просто использовал абсолютный путь)
строка 1: найти все каталоги, содержащие файлы flac и pipe (|), в
строку сортировки 2: удалить дубликаты с сортировкой и канал в списке в
строке цикла 3: для каждого каталога
строка строки 4: показать каталог в
строке процесса 5: rsync в целевой каталог плюс удалить источник и сохранить структуру (-R) в
строке назначения 6: удалить пустой каталог (так как rsync удаляет только файлы)
(2) после успешного выполнения скрипта в (1) вы можете выполнить следующую команду в исходном каталоге
Эта команда удаляет все пустые каталоги, не удаленные в скрипте. Т.е. каталоги "Artist", где все подпапки / альбомы содержат файлы flac.
источник