it-swarm-ru.tech

Как удалить все файлы в каталоге?

Я пытаюсь удалить все файлы и подкаталоги в каталоге. Я использовал rm -r, чтобы удалить все файлы, но я хочу удалить все файлы и подкаталоги, кроме самого верхнего каталога.

Например, у меня есть верхний каталог, такой как images. Содержит файлы header.png, footer.png и ​​подкаталог.

Теперь я хочу удалить header.png, footer.png и ​​подкаталог, но не images.

Как я могу сделать это в Linux?

78
poorani

Если ваш каталог верхнего уровня называется images, тогда запустите rm -r images/*. При этом используется глобальный оператор Shell * бежать rm -r для каждого файла или каталога в images.

63
Jordan Lewis

Чтобы удалить скрытые файлы, вы должны указать:

rm -r images/* images/.*

С раковинами, чьи шары включают . а также .., это приведет к ошибке вроде

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

но это удалит скрытые файлы.

Подход без сообщения об ошибке заключается в использовании поиска/удаления с помощью mindepth. Это гну-найти.

find images -mindepth 1 -delete

Вашей находке может не хватать -mindepth или -delete предикат, в этом случае вы можете сделать:

find images/. ! -name . -Prune -exec rm -rf {} +
54
user unknown

Чтобы удалить все файлы и каталоги (включая скрытые) в каталоге, вы можете попробовать следующее:

  • использовать ls -Ab для соответствия всем файлам/каталогам

    cd dir_name && rm -rf `ls -Ab`
    
  • используйте find для сопоставления всех файлов/каталогов

    find dir_name -mindepth 1 -delete
    

    или, если ваш find не поддерживает -delete:

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • удалить папку, а затем воссоздать ее

    rm -rf dir_name && mkdir dir_name
    
  • в баш,

    shopt -s dotglob  
    rm -rf dir_name/*
    
21
zeekvfu

Чтобы рекурсивно удалить все обычные файлы внутри каталога, эта команда (при условии GNU или FreeBSD find) достаточно хороша:

find . -type f -delete

Это оставляет все нестандартные файлы, такие как символические ссылки (указывают ли они на обычные файлы или нет), каталоги, fifos, сокеты, устройства ...

Смотрите также:

find . ! -type d -delete

удалить файлы любого типа, кроме каталог.

11
amit singh

Попробуйте эту версию:

 rm -r test/*
6
demas

Я использую команду find здесь:

Шаг 1: Найдите все файлы и удалите их:

find /path/to/directory/ -type f -exec rm {} \;

Пример:

find /home/user/Desktop/images/ -type f -exec rm {} \;

Шаг 2: Найдите все подкаталоги и удалите их:

find /path/to/directory/ -type d -exec rm -R {} \;
3
Mandar Shinde

Вопрос заключался в том, чтобы очистить каталог = удалить содержимое каталога, включая скрытые файлы, но не сам каталог. Команда find с -mindepth 1 на самом деле правильный путь, но чтобы избежать сообщений об ошибках, ее необходимо объединить с -maxdepth 1:

find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
3
Maddes

синтаксис rm:

rm [OPTION]... FILE...

Итак, вы должны указать соответствующий путь явно, например,.

rm -r sub_dir/
0
Zaur Nasibov

Вы можете удалить каталог, используя следующую команду:

Sudo rm -r directoryname1/2/3/*

После 3/* будет удален весь каталог.

Пример Sudo rm -r Downloads/song/*

Будут удалены все файлы, находящиеся в Downloads/song.

0
Dharmendra Rajput

Это прекрасно работает для меня, проверено несколько вариантов работы каждый раз.

Из каталога, в котором находится каталог изображений.

rm -frd ./images/*

перед:

images/
    |_ header.png
    |_ footer.png
    |_ subdir/

после:

images/
0
deb-linux-user

Чтобы удалить все файлы и подкаталоги в текущем каталоге, , включая скрытые, без сообщения об ошибке :

rm -rf .[^.] .??* *

Или из родительского каталога:

rm -rf images/.[^.] images/.??* images/*

От https://serverfault.com/a/47940/269538 .

0
this

Другой вариант:

$ rm -rf /path/to/directory/{*,.*}

источник: https://askubuntu.com/a/552834/56648

0
Eyal Levin