bash - удалить все каталоги (и содержимое), но не файлы в pwd


19

Я хотел бы удалить все каталоги с pwd, но оставить файлы на pwd в покое. Если содержание моего pwd:

mydir1
mydir2
myfile1
myfile2

тогда я хотел бы остаться только с

myfile1
myfile2

Я предполагаю, что мне нужно использовать rm -r -i

Я прав?

Ответы:


10

Нет, это даст вам «пропущенный операнд», поскольку вы ничего не указали. Ввод *подсказки также для файлов.

Я бы попробовал:

find -mindepth 1 -maxdepth 1 -type d -exec rm -r {} \;

Это mindepth 1исключит .из результатов, maxdepth 1исключит попытки выполнить в каталогах, которые в любом случае будут удалены (поэтому создается предупреждение). Но на практике вы можете пропустить их обоих, если согласитесь получить несколько «невинных» предупреждений.


21

Я нашел это где-то:

rm -r */

Кажется, самый простой путь. В вашем примере вам придется подтверждать каждый случай, если у вас есть 5 файлов, это нормально, но с большими файловыми структурами интерактивный режим не подходит ... Просто как предложение, если это важная информация, сделайте резервный...


1
Это также будет следовать символическим ссылкам, которые, скорее всего, здесь не нужны.
JdeBP

8

использование

rm -rf ./*/

Это позволяет избежать интерактивного режима и удаляет только каталоги в вашем локальном каталоге.


Как указал JdeBP на очень похожий ответ Мартина , если текущий каталог (верхнего уровня) содержит символические ссылки на другие каталоги, они также будут удалены (даже если они не находятся в текущем каталоге или не подчинены ему).
Скотт


-1
you can also try in this way to delete only all folders not files from any location in linux.

    #delete only all dir and don't touch files
    #!/bin/bash
    for dir in `ls -l | grep ^d | awk '{print $9}'`
    do
    echo "going to delete $dir " `rm -rf $dir`
    done
    ls
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.