У меня следующая структура каталогов:
Main_Dir
|
-----------------------------------
Subdir1 Subdir2 Subdir3
| | |
--------- --------- ---------
| | | | | | | | |
fo1 fo2 f03 fo1 fo2 f03 fo1 fo2 f03
Я хочу , чтобы скопировать все подкаталоги ( Subdir1
, Subdir2
, Subdir3
) в новую папку. Но я хочу только скопировать fo1
и fo2
папки на новом месте.
Не уверен, как это можно сделать.
Ответы:
Если дерево каталогов больше, чем просто,
..../f03
вы можете использовать этуrsync
команду, чтобы скопировать каждыйfo1
&fo2
и исключить любой другой каталог с именемfo*
.При работе с этими типами сценариев копирования я всегда использую
rsync
и переключатели--dry-run
&,--verbose
чтобы я мог видеть, что он собирается делать, фактически не копируя файлы.пример
Пробный прогон.
Если вы хотите увидеть некоторую
rsync
внутреннюю логику относительно того, что включено / исключено, используйте--verbose
переключатель.Если вам нужно исключить другие формы каталогов, вы можете добавить несколько исключений.
источник
Используйте
rsync
:источник
Вы можете попробовать что-то вроде этого:
Команда
find
возвращает все прямые подкаталоги Main_Dir.basename
возвратит имя подкаталога FOUND (например ,basename Main_Dir/Subdir1
возвращаетсяSubdir1
). Затем использовать оболочку в фигурных скобках , чтобы не вводитьfo1
иfo2
несколько раз и скопировать их на вновь созданныйnew_dir/$(basename $subdir)
каталог.В конкретном случае вы упоминаете, где есть только каталоги
Main_Dir
и где в именах нет пробелов или странных символов, вы можете упростить приведенное выше, чтобыисточник
Если ваша структура каталогов точно такая же, как в вашем примере (т.е. все
fo
файлы находятся на одном уровне):источник