Как удалить папки и там содержимое и сохранить файлы в текущем каталоге?
до
parent
├── folder1
├── folder2
│ ├── file1
│ ├── file2
├── folder3
├── file3
├── file4
└── file5
после:
parent
├── file3
├── file4
└── file5
Как удалить папки и там содержимое и сохранить файлы в текущем каталоге?
до
parent
├── folder1
├── folder2
│ ├── file1
│ ├── file2
├── folder3
├── file3
├── file4
└── file5
после:
parent
├── file3
├── file4
└── file5
Нечто подобное должно сработать
cd parent
find . ! -path . -maxdepth 1 -type d -exec rm -rf {} \;
При этом будут искать каталоги в текущем рабочем каталоге, и будет возвращаться только на 1 уровень вниз, а каталоги удаляются. Лучше всего выполнить тест-запуск с помощью ls вместо rm, чтобы вы могли проверить, что будет удалено
cd parent
find . ! -path . -maxdepth 1 -type d -exec ls {} \;
пример
jake@jake-HP /tmp/test $ tree
.
├── 1
├── 2
├── bar
│ ├── 1
│ ├── 2
│ └── 3
├── blah
│ ├── 1
│ ├── 2
│ └── 3
└── foo
├── 5
└── 9
3 directories, 10 files
jake@jake-HP /tmp/test $ find . ! -path . -maxdepth 1 -type d -exec ls {} \;
1 2 bar blah foo
1 2 3
5 9
1 2 3
jake@jake-HP /tmp/test $ find . ! -path . -maxdepth 1 -type d -exec rm -rf {} \;
jake@jake-HP /tmp/test $ tree
.
├── 1
└── 2
0 directories, 2 files
Использование find - это хорошо, потому что вы точно указываете, что хотите сделать. Однако у xargs в ответе Джейка есть проблема с именами каталогов, содержащими пробелы. Вам нужно добавить -print0, чтобы найти, и -0 в xargs.
Я бы написал
find parent -type d -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
Это еще проще:
rm -rf parent/*/
Тем не менее, он не удалит скрытые каталоги (начиная с точки), вам нужно добавить их:
rm -rf parent/*/ parent/.[^.]*/
Остерегайтесь, если у вас есть символические ссылки, указывающие в другом месте, хотя.
Если вы не доверяете */ сопоставлять только каталоги, менее чистое решение, которое приведет к большому количеству ошибок (и которое не учитывает скрытые каталоги, потому что это усложняется)
rm -rf parent/*/*
rmdir parent/*