Мне интересно, есть ли способ в Ubuntu удалить все подпапки в папке, но сохранить все файлы?
Вопрос невозможен. Вы не можете удалить каталог, не повредив файлы внутри него.
может сработать комбинация из двух приведенных выше ответов.
шаг 1.
find oldLocation -type f -exec mv {} newLocation \; #find and copy all files.
шаг 2.
rm -frv oldLocation
Возможно, вы захотите перефразировать ваши вопросы, не очень понятно, какое поведение вы хотите.
Принятие Вас имеет каталог, где Вы хотите удалить все подкаталоги и любые файлы и каталоги, они содержат, но сохраняют файлы, которые были в исходном каталоге, можно сделать
find your_directory -maxdepth 1 -type d -exec rm -rf {} \;
Так, учитывая дерево как
/path/to/dir1
|_ _ _ _ subdir1
| |_ _ _ _ file1
| |_ _ _ _ file2
|
|_ _ _ _ subdir2
|
|_ _ _ _ file3
|
|_ _ _ _ file4
выполнение
find /path/to/dir1 -maxdepth1 -type d -exec rm -rf {} \;
оставит Вас с
/path/to/dir1
|
|_ _ _ _ file3
|
|_ _ _ _ file4
Хм, я предполагаю, что вы хотите сохранить файлы в новой папке, верно?
Внимание: убедитесь, что вы находитесь в правильном каталоге. Убедитесь, что вы делаете тестовый прогон в первую очередь. Убедитесь, что в разных каталогах нет файлов с одинаковыми именами.
mv */* /path/to/new/folder
rmdir *
Все становится немного сложнее, если у вас более одного уровня, например у вас есть подпапки подпапок, и вы хотите переместить обычные файлы и удалить каталоги. В этом случае
find . -type f -exec mv {} /path/to/new/folder \;
find . -type d -exec rm -rf {} \;
Давайте сделаем вызов еще более интересным. Скажем, мы хотим переместить файлы, но мы хотим изменить имена так, чтобы они отражали структуру каталогов. Например, если в текущем каталоге есть файл foo.jpg
в ./blah/pah/oh/
, то мы хотим переименовать его в blah_pah_oh_foo.jpg
. По соображениям безопасности мы можем скопировать его вместо перемещения.
for i in `find . -type f -print` ; do \
newname=`echo $i | sed 's/^\.\///;s/\//_/g'` ; \
echo moving $i to $newname ; \
mv $i $newname ; \
done
Я знаю, что можно удалить все файлы, но сохранить каталоги с помощью этой команды:
find . -name *.* -exec rm -f {} \;
Но я не верю, что существует противоположный путь.
Я собираюсь предположить, что у вас есть папка, подобная этой:
dir
subdir1 <--directory
subdir2 <--directory
file.txt <--file
foo.mp3 <--file
bar.pdf <--file
... и вы просто хотите удалить две подкаталоги и все, что они содержат, оставляя файлы нетронутыми. Просто используйте:
rm -r */
Конечный слеш гарантирует, что он будет соответствовать только каталогам (и ссылкам на каталоги).
Хотя ваш вопрос довольно расплывчатый, отредактируйте его, чтобы было понятно, чего вы на самом деле хотите.