Я должен сохранить все каталоги, которые содержат файлы в определенном подкаталоге, но удалить остальные каталоги, в которых подкаталог пуст.
Чтобы быть более конкретным, вот структура:
A
|
|--------312311
| |
| |----Recording
| |----a.txt
| |----b.txt
|
|
|--------453453
| |----Recording
| |
| |-------a.mp3
| |----a.txt
| |----b.txt
|
|
|--------566532
| |----Recording
| |----a.txt
| |----b.txt
Подкаталоги могут содержать или не содержать файл. Поэтому мне нужно удалить весь каталог, например «312311» и «566532», и нужно оставить только «453453» со всеми данными в нем, поскольку в нем есть файл в папке «Запись», который является для меня специальным каталогом.
Я видел много постов, но это ссылки на многие конкретные имена файлов. Любая помощь будет высоко ценится, так как мне нужно делать много раз в неделю.
command-line
directory
find
Дерек Джеймс
источник
источник
Ответы:
Сценарий ниже будет делать именно так, как вы описываете, это:
Заглядывает в каждую из папок для папки с именем "Запись"
На изображении:
приведет к:
Сценарий
Использовать
delete_empty.py
Запустите его с каталогом (full!) (Содержащим ваши подкаталоги, A в вашем примере) в качестве аргумента команды:
Вот и все.
объяснение
Подача содержимого вашей папки «А» в скрипт,
перечислит свои подкаталоги (и файлы). Потом:
попытается перечислить содержимое каждой из (под) папок, что вызовет ошибку, если элемент является файлом:
или если папка «Запись» вообще не существует:
Если папка «Запись» существует и пуста, верхняя папка удаляется:
РЕДАКТИРОВАТЬ
Кроме того, как требуется в комментариях, версия, которая будет проверять наличие нескольких подкаталогов (имен).
Если каталог содержит какой-либо из перечисленных (не пустых) подкаталогов, каталог сохраняется. В противном случае он будет удален.
Использовать
delete_empty.py
Запустите его с каталогом (full!) (Содержащим ваши подкаталоги, A в вашем примере) и именами подкаталогов в качестве аргументов команды:
Вот и все.
Сценарий
Заметка
Пожалуйста, сначала запустите тестовый каталог, чтобы убедиться, что он делает именно то, что вы хотите.
источник
Использование
find
иxargs
:(удалите,
echo
когда вам удобно, что он определяет правильные каталоги).printf '%h\0
Часть печатает (нуль) родительский каталог - отman find
:Пример: дано
тогда
источник
[\d]*
?Вот более простое решение для bash:
Это работает, потому
rmdir
что потерпит неудачу, если каталог не пустой, и&&
предотвратитrm -r
выполнение, если это неrmdir
удастся. Шар*/
гарантирует, что вы работаете только с каталогами, поэтому другие файлы не будут затронуты.источник