Показать статистику
0 голосов
от (320 баллов)

Господа, есть несколько вопросов к вам и если кто подскажет оперативно, как их решить, то буду очень признателен и благодарен.

Скажите пожалуйста, каким образом можно скопировать в другую папку только нужные мне файлы, но чтобы при этом структура каталогов, только нужных файлов, должна быть сохранена.

Для наглядности приведу небольшой пример, что я имею ввиду и что мне нужно получить в конечном итоге:

в каталоге /media/2TB/01/ есть следующие директории dir1, dir2, dir3

в dir1 поддиректории subdir1 и subdir2

в dir2 поддиректории subdir3 и subdir4

в dir3 поддиректории subdir5 и subdir6

но только в subdir2 и subdir3 есть подходящие мне файлы с расширением, к примеру, .txt. В других папках уже другие расширения, которые в принципе не нужны.

Мне нужно сделать так, чтобы файлы, у которых расширение .txt нужно скопировать в /home/aleks/01/, так чтобы существовали только файлы и папки /home/aleks/01/dir1/subdir2/ с вложеными .txt, и /home/aleks/01/dir2/subdir3/ с вложеными .txt

в реальном примере больше вложенных папок и только определенные папки, с вложеными файлами должны быть скопированы.

Я думаю, что объяснил понятным языком. Если кому-то что-то вдруг непонятно, то задавайте уточняющие вопросы. Постараюсь как можно оперативнее на них ответить.

232 просмотров 1 ответов

1 Ответ

0 голосов
от (500 баллов)

Voka, я не совсем уверен в том, что я правильно понял Вашу задачу, но с похожей ситуацией уже приходилось однажды сталкиваться, поэтому моя интерпретация, если позволите имеет такой вид:

1. Изначально нужно найти в каталоге /media/2TB/01/ все файлы с расширением txt (обратите внимание на то, что поиск регистронезависимый).

2. Далее нужно все эти файлы скопировать в каталог /home/aleks/01/, воссоздав в каталоге ту же структуру вложенных каталогов, что была в /home/aleks/01/ для каждого файла, который копируется.

Если это - то что Вам нужно, то вот так это можно завернуть в одну длинную команду:

Код:

s=$IFS; IFS=$'\n'; for i in `find /media/2TB/01/ -type f -iname "*.txt" -exec ls {} \; `; do new_dir=`dirname $i | sed "s/\/media\/2TB\/01/\/home\/aleks\/01/"`; mkdir -p "$new_dir"; cp "$i" "$new_dir"; done; IFS=$s

Попробуйте так. Должно получиться по идее.

...