Это сводит меня с ума. Все результаты Google для обратного сценария.
Итак, у меня есть структура каталогов, как:
MyFiles
| file1
| file2
| file3
| MoreFiles
| | file4
| | file5
И что мне нужно, так это архив (желательно zip, когда я передаю процесс пользователям, не являющимся tar, но бонусные баллы за ответы, показывающие, как это сделать в zip и tar), который выглядит следующим образом:
archive.zip
| MoreFiles
| | file4
| | file5
Таким образом, файлы верхнего уровня исключаются, но подкаталоги и их файлы включены.
Пока лучшее, что я мог придумать, это:
zip -r archive.zip MyFiles -x " . "
но это исключает все файлы на каждом уровне, поэтому я просто получаю структуру каталогов. Я только хочу исключить каталоги, сидящие прямо в целевом каталоге.
Ой! И на самом деле, мой реальный вариант использования состоит в том, чтобы исключить содержимое одного конкретного подкаталога, поэтому работа со следующим самым глубоким уровнем не является обходным путем. Реальный сценарий:
MyFiles
| file1
| file2
| file3
| Level1Files1
| | file4
| | file5
| | Level2Files1
| | | file6
| | | file7
| | Level2Files2
| | | file8
| | | file9
| Level1Files2
| Level1Files3
с конечной целью включить все на верхнем уровне, но исключить файлы внутри определенного подкаталога, но не исключить подкаталоги внутри этого первого подкаталога или их содержимое, так что, если бы я хотел исключить верхние файлы подкаталога Level1Files1 выше, результат был бы быть:
archive.zip
| file1
| file2
| file3
| Level1Files1
| | Level2Files1
| | | file6
| | | file7
| | Level2Files2
| | | file8
| | | file9
| Level1Files2
| Level1Files3