- How do I delete all empty directories in a directory from the command line?
- 5 Answers 5
- Удаляем пустые файлы и директории
- Удаляем пустые файлы
- Удаляем пустые директории
- Удалить пустые файлы и директории в Unix/Linux
- Удалить пустые файлы в Unix/Linux
- Удалить пустые директории в Unix/Linux
- Команда find в Linux – мощный инструмент сисадмина
- Поиск по имени
- Поиск по типу файла
- Поиск по размеру файла
- Единицы измерения файлов:
- Поиск пустых файлов и каталогов
- Поиск времени изменения
- Поиск по времени доступа
- Поиск по имени пользователя
- Поиск по набору разрешений
- Операторы
- Действия
- -delete
- -exec:
- Заключение
How do I delete all empty directories in a directory from the command line?
Say I have a directory named foo/ . This folder includes subdirectories. How can I delete all the empty directories in one command?
5 Answers 5
find . -empty -type d -delete
The find command is used to search for files/directories matching a particular search criteria from the specified path, in this case the current directory (hence the . ).
The -empty option holds true for any file and directory that is empty.
The -type d option holds true for the file type specified; in this case d stands for the file type directory.
The -delete option is the action to perform, and holds true for all files found in the search.
Hey Bill, I tried to post another similiar question and it wouldn’t let me because it said it was a dupe, so I was hoping you might be able to answer me here. Say I wanted to do the same thing as above but remove all directories whether they are empty or not.
The way you would remove directories, regardless of whether or not they are empty, type the following command: rm -rf
It is possible to do this by using a pipe to feed the stdout of one command (e.g. find ) into the stdin of the other (e.g. rm ), however, be very careful since it may wipe out or delete files/directories that you don’t want to delete! For further information on how to do this, see the man pages for each of these commands. To be safe, always test such things in a temporary directory before trying out on the real thing.
@joeybaruch On MacOS almost every directory you «visited» with Finder.app contains a .DS_Store hidden file, that usually stores your sorting/viewing preferences for that directory. Other apps may add other hidden files (e.g. Adobe Bridge may add a .BridgeLabelsAndRatings file), so perhaps those directories aren’t really empty. Anyways, you can remove the .DS_Store file with find . -name ‘.DS_Store’ -delete and then try again to remove the empty directories with the suggested command.
Удаляем пустые файлы и директории
Рассмотрим, как удалить все пустые файлы или директории в определенной директории. Сделать это очень просто через командную строку, используя команды find, rm и rmdir.
Откройте терминал (командную строку) и перейдите командой cd в ту директорию, в которой вам необходимо удалить пустые файлы:
Удаляем пустые файлы
Выведем список пустых файлов. Для этого выполним команду find и укажем ей, что нам в текущей директории необходимо найти только файлы (параметр -type f) и эти файлы должны быть пустыми (параметр -empty):
Теперь воспользуемся аргументом -exec, который позволяет выполнить определенную команду над списком файлов. Мы укажем, что хотим выполнить команду rm (удалить файл). Итак, чтобы удалить пустые файлы выполните команду:
find . -type f -empty -exec rm <> \;
Удаляем пустые директории
Сначала просто посмотрим, какие директории у нас не содержат файлов. Для этого, так же как и для файлов используем команду find с ключом -empty, но указываем -type d. Выполним в командной строке:
Получим список пустых директорий.
Теперь нам нужно их удалить. Аргументу -exec укажем команду rmdir (удалить директори). Чтобы удалить пустые директории выполняем:
find . -type d -empty -exec rmdir <> \;
Обращаю ваше внимание на то, что выполнять данные команды нужно с осторожностью, чтобы случайно не удалить то, что не нужно. Также нельзя выполнять их в системных директориях, так как в большинстве случаев пустые файлы и директории созданы там специально, и их отсутствие приведет к сбоям в системе.
Дополнительную информацию по команде find вы можете почитать в статье Команда find: широкие возможности для поиска файлов в Linux.
Удалить пустые файлы и директории в Unix/Linux
Решил написать статью о там как можно удалить пустые файлы и директории в ОС — Linux. Я покажу и расскажу как это можно сделать в своей статье «Удалить пустые файлы и директории в Linux» и приведу готовые примеры как можно удалить все пустые файлы или директории в определенной папке. Делается это через командную строку с использованием команд: find, rm и rmdir.
Сейчас откроем терминал (командную строку) и перейдем в ту папку, в которой вам нужно удалить все пустые файлы:
Удалить пустые файлы в Unix/Linux
Для начала, посмотрим список имеющихся пустых файлов. Для этого, я буду использовать команду find и укажу ей (передам параметр), что мне нужно найти только файлы (за это отвечает параметр «-type f») и что данные файлы должны быть пустыми (за это отвечает параметр «-empty») в текущей моей папки:
Теперь, я воспользуюсь аргументом «-exec», он дает возможность выполнить определенную команду над списком файлов. Я передам в «exec» то, что хочу выполнить команду «rm» (удалить файлы) для пустых файлов:
# find . -type f -empty -exec rm <> \;
Удалить пустые директории в Unix/Linux
Для начала, я проверю какие папки у меня не содержат файлов. Для этого, я так же буду использовать команду «find» с параметром «-empty», но указываю тип поиска «-type d» (поиск папок):
Сейчас мне необходимо их удалить. Передаю аргументу «-exec» команду rmdir (удаление папок) для того чтобы удалить все имеющиеся пустые папки:
# find . -type d -empty -exec rmdir <> \;
# find . -type d -empty -exec rmdir <> +
# find . -type d -empty -delete
Статья «Удалить пустые файлы и директории в Unix/Linux» подошла к завершению.
Команда find в Linux – мощный инструмент сисадмина
Иногда критически важно быстро найти нужный файл или информацию в системе. Порой можно ограничиться стандартами функциями поиска, которыми сейчас обладает любой файловый менеджер, но с возможностями терминала им не сравниться.
Команда find – это невероятно мощный инструмент, позволяющий искать файлы не только по названию, но и по:
Данная команда будет очень полезна системным администраторам для:
Команда find в Linux производит поиск файлов и папок на основе заданных вами критериев и позволяет выполнять действия с результатами поиска.
Синтаксис команды find:
$ find directory-to-search criteria action
- directory-to-search (каталог поиска) – это отправной каталог, с которой find начинает поиск файлов по всем подкаталогам, которые находятся внутри. Если не указать путь, тогда поиск начнется в текущем каталоге;
- criteria (критерий) – критерий, по которым нужно искать файлы;
- action (действие) – что делать с каждым найденным файлом, соответствующим критериям.
Поиск по имени
Следующая команда ищет файл s.txt в текущем каталоге:
- . (точка) – файл относится к нынешнему каталогу
- -name – критерии по которым осуществляется поиск. В данном случае поиск по названию файла.
В данном случае критерий -name учитывает только символы нижнего регистра и файл S.txt не появиться в результатах поиска. Чтобы убрать чувствительность к регистру необходимо использовать –iname.
$ find . -iname "s.txt" ./s.txt ./S.txt
Для поиска всех изображений c расширением .png нужно использовать шаблон подстановки *.png:
$ find . -name "*.png" ./babutafb.png ./babutafacebook.png ./Moodle2.png ./moodle.png ./moodle/moodle1.png ./genxfacebook.png
Можно использовать название каталога для поиска. Например, чтобы с помощью команды find найти все png изображения в каталоге home:
$ find /home -name "*.png" find: `/home/babuta/.ssh': Permission denied /home/vagrant/Moodle2.png /home/vagrant/moodle.png /home/tisha/hello.png find: `/home/tisha/testfiles': Permission denied find: `/home/tisha/data': Permission denied /home/tisha/water.png find: `/home/tisha/.cache': Permission denied
Если выдает слишком много ошибок в отказе разрешения, тогда можно добавить в конец команды – 2> /dev/null. Таким образом сообщения об ошибках будут перенаправляться по пути dev/null, что обеспечит более чистую выдачу.
find /home -name "*.jpg" 2>/dev/null /home/vagrant/Moodle2.jpg /home/vagrant/moodle.jpg /home/tisha/hello.jpg /home/tisha/water.jpg
Поиск по типу файла
Критерий -type позволяет искать файлы по типу, которые бывают следующих видов:
- f – простые файлы;
- d – каталоги;
- l – символические ссылки;
- b – блочные устройства (dev);
- c – символьные устройства (dev);
- p – именованные каналы;
- s – сокеты;
Например, указав критерий -type d будут перечислены только каталоги:
$ find . -type d . ./.ssh ./.cache ./moodle
Поиск по размеру файла
Допустим, что вам необходимо найти все большие файлы. Для таких ситуаций подойдет критерий -size.
- «+» — Поиск файлов больше заданного размера
- «-» — Поиск файлов меньше заданного размера
- Отсутствие знака означает, что размер файлов в поиске должен полностью совпадать.
В данном случае поиск выведет все файлы более 1 Гб (+1G).
$ find . -size +1G ./Microsoft_Office_16.29.19090802_Installer.pkg ./android-studio-ide-183.5692245-mac.dmg
Единицы измерения файлов:
Поиск пустых файлов и каталогов
Критерий -empty позволяет найти пустые файлы и каталоги.
$ find . -empty ./.cloud-locale-test.skip ./datafiles ./b.txt . ./.cache/motd.legal-displayed
Поиск времени изменения
Критерий -cmin позволяет искать файлы и каталоги по времени изменения. Для поиска всех файлов, измененных за последний час (менее 60 мин), нужно использовать -60:
$ find . -cmin -60 . ./a.txt ./datafiles
Таким образом можно найти все файлы в текущем каталоге, которые были созданы или изменены в течение часа (менее 60 минут).
Для поиска файлов, которые наоборот были изменены в любое время кроме последнего часа необходимо использовать +60.
Поиск по времени доступа
Критерий -atime позволяет искать файлы по времени последнего доступа.
Таким образом можно найти файлы, к которым не обращались последние полгода (180 дней).
Поиск по имени пользователя
Опция –user username дает возможность поиска всех файлов и каталогов, принадлежащих конкретному пользователю:
$ find /home -user tisha 2>/dev/null
Таким образом можно найти все файлы пользователя tisha в каталоге home, а 2>/dev/null сделает выдачу чистой без ошибок в отказе доступа.
Поиск по набору разрешений
Критерий -perm – ищет файлы по определенному набору разрешений.
Поиск файлов с разрешениями 777.
Операторы
Для объединения нескольких критериев в одну команду поиска можно применять операторы:
Например, чтобы найти файлы размером более 1 Гбайта пользователя tisha необходимо ввести следующую команду:
$ find /home -user tisha -and -size +1G 2>/dev/null
Если файлы могут принадлежать не только пользователю tisha, но и пользователю pokeristo, а также быть размером более 1 Гбайта.
$ find /home \( -user pokeristo -or -user tisha \) -and -size +1G 2>/dev/null
Перед скобками нужно поставить обратный слеш «\».
Действия
К команде find можно добавить действия, которые будут произведены с результатами поиска.
- -delete — Удаляет соответствующие результатам поиска файлы
- -ls — Вывод более подробных результатов поиска с:
- Размерами файлов.
- Количеством inode.
-delete
Полезен, когда необходимо найти и удалить все пустые файлы, например:
Перед удалением лучше лишний раз себя подстраховать. Для этого можно запустить команду с действием по умолчанию -print.
-exec:
Данное действие является особенным и позволяет выполнить команду по вашему усмотрению в результатах поиска.
- command – это команда, которую вы желаете выполнить для результатов поиска. Например:
- rm
- mv
- cp
С помощью –exec можно написать альтернативу команде –delete и применить ее к результатам поиска:
Другой пример использования действия -exec:
$ find . -name "*.jpg" -exec cp <> /backups/fotos \;
Таким образом можно скопировать все .jpg изображения в каталог backups/fotos
Заключение
Команду find можно использовать для поиска:
- Файлов по имени.
- Дате последнего доступа.
- Дате последнего изменения.
- Имени пользователя (владельца файла).
- Имени группы.
- Размеру.
- Разрешению.
- Другим критериям.
С полученными результатами можно сразу выполнять различные действия, такие как:
Команда find может сильно облегчить жизнь системному администратору, а лучший способ овладеть ей – больше практиковаться.