Поиск файлов с помощью bash и копирование в другое место и уменьшение глубины папок - PullRequest
0 голосов
/ 01 апреля 2010

Я пытаюсь восстановить совместный жесткий диск, нет такой структуры, какой бы то ни было, поэтому музыка и изображения везде, но в именованных папках иногда> 5 папок глубиной, мне удалось написать одну строку, которая находит файлы и копирует их на подключенный диск, но он полностью сохраняет структуру файла. То, что мне нужно, это немного кода, который ищет диск и копирует в другое место и копирует только родительскую папку с файлами mp3 / jpg внутри, а не полный путь. Другая проблема, с которой я столкнулся, - это /folder/folder/folder/Artist/1.mp3..2.mp3..10.mp3 и т. Д., И т. Д. его следы снова.

Что у меня сейчас работает:

find /media/HP/ -name *.mp3 -fprintf /media/HP/MUSIC/Script.sh 'mkdir -p "/media/HP/MUSIC/%h" \n cp "%h/%f" "/media/HP/MUSIC/%h/"\n'

Затем я запускаю script.sh, и он выполняет все операции копирования.

Большое спасибо

Ответы [ 3 ]

1 голос
/ 01 апреля 2010

ОК, ребята, спасибо за вклад, который заставил меня задуматься об этом, и я с помощью коллеги (спасибо SiG) получил результат:

Этот однострочный файл находит файлы и пишет файл сценария для отдельного запуска, но копирует только последнюю папку, как я хотел изначально.

Код:

find /some/folder/ -name *.mp3 |  awk 'BEGIN{FS="/"}{print "mkdir -p \"/some/new/place/" $(NF-1) "\"\ncp -v -p \"" $0 "\" \"/some/new/place/" $(NF-1) "/" $NF "\""}' > script.sh

Вывод:

mkdir -p "/media/HP/MUSIC/Satize"  cp -v -p "/media/HP/Users/REBEKAH/Music/Satize/You Don't Love Me.mp3" "/media/HP/MUSIC/Satize/You Don't Love Me.mp3"

Когда скрипт script.sh запущен, он выполняет всю работу, и я получаю очень сокращенную файловую структуру, которую я могу скопировать на новый диск.

Еще раз спасибо, люди, высоко ценимые. KJF

1 голос
/ 01 апреля 2010

То, что вы, вероятно, хотите сделать, будет выглядеть следующим образом:

mkdir "$dest/$(basename $(dirname $source))"
0 голосов
/ 01 апреля 2010

Если вы выполняете операцию рекурсивно (ввод каталога по каталогу), вы можете каждый раз сохранять путь как: Road_Dir=$(pwd) (скажем, dir1 / dir2 / dir3 /)

Затем вы обнаруживаете, что ваш каталог artist_name вы сохраняете, это Music_Dir=$(pwd) Наконец, вы можете извлечь ваш каталог artist_name с помощью простой команды:

Final_Dir=${Music_Dir##$Road_Dir/} (что означает извлечь строку $ Road_Dir / из $ Music_Dir, начиная слева от $ Music_Dir)

С этим Final_Dir будет содержать artist_name, и вы можете скопировать свой музыкальный файл как $ Final_Dir / Music.mp3 ...

...