Как удалить подпапки, но сохранить все файлы?

Мне интересно, есть ли способ в Ubuntu удалить все подпапки в папке, но сохранить все файлы?

4
задан 11 September 2013 в 19:32

6 ответов

Вопрос невозможен. Вы не можете удалить каталог, не повредив файлы внутри него.

0
ответ дан 11 September 2013 в 19:32

может сработать комбинация из двух приведенных выше ответов.

шаг 1.

find oldLocation -type f -exec mv {} newLocation \;   #find and copy all files.

шаг 2.

rm -frv oldLocation 

Возможно, вы захотите перефразировать ваши вопросы, не очень понятно, какое поведение вы хотите.

0
ответ дан 11 September 2013 в 19:32

Принятие Вас имеет каталог, где Вы хотите удалить все подкаталоги и любые файлы и каталоги, они содержат, но сохраняют файлы, которые были в исходном каталоге, можно сделать

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
0
ответ дан 11 September 2013 в 19:32

Хм, я предполагаю, что вы хотите сохранить файлы в новой папке, верно?

Внимание: убедитесь, что вы находитесь в правильном каталоге. Убедитесь, что вы делаете тестовый прогон в первую очередь. Убедитесь, что в разных каталогах нет файлов с одинаковыми именами.

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
0
ответ дан 11 September 2013 в 19:32

Я знаю, что можно удалить все файлы, но сохранить каталоги с помощью этой команды:

find . -name *.* -exec rm -f {} \;

Но я не верю, что существует противоположный путь.

0
ответ дан 11 September 2013 в 19:32

Я собираюсь предположить, что у вас есть папка, подобная этой:

dir
 subdir1  <--directory
 subdir2  <--directory
 file.txt <--file
 foo.mp3  <--file
 bar.pdf  <--file

... и вы просто хотите удалить две подкаталоги и все, что они содержат, оставляя файлы нетронутыми. Просто используйте:

rm -r */

Конечный слеш гарантирует, что он будет соответствовать только каталогам (и ссылкам на каталоги).

Хотя ваш вопрос довольно расплывчатый, отредактируйте его, чтобы было понятно, чего вы на самом деле хотите.

0
ответ дан 11 September 2013 в 19:32

Другие вопросы по тегам:

Похожие вопросы: