Как удалить все файлы в папке, кроме одного конкретного файла в Linux
Допустим, у вас в папке более 100 файлов. Вы хотите удалить их все, кроме одного или нескольких конкретных файлов. Как бы вы это сделали? Вы можете скопировать файлы, которые хотели сохранить, и сохранить их в другом месте, а затем удалить остальные файлы или всю папку. Но подождите, я знаю самый простой способ сделать это. Вы можете удалить все старые файлы, кроме одного конкретного файла или файлов определенного типа, за один раз, с помощью одной строки команды. Хотите знать, как? Читай дальше.
Удалить все файлы в папке, кроме одного конкретного файла
Представим себе следующий пример. У нас есть папка под названием «test», содержащая 10 текстовых файлов.
ls test/
Пример вывода:
file10.txt file2.txt file4.txt file6.txt file8.txt
file1.txt file3.txt file5.txt file7.txt file9.txt
Теперь я хочу удалить все в этой папке, кроме file10.txt.
Для этого может быть много команд. Но это пять команд, которые я знаю.
Сначала перейдите в папку test:
cd test/
И выполните следующую команду:
rm -f !(file10.txt)
Или просто используйте:
rm !(file10.txt)
Приведенная выше команда удалит все файлы в тестовой папке, кроме файла file10.txt .
Вы также можете использовать команду find, чтобы удалить все, кроме определенного. Следующая команда удалит все файлы в текущей папке (т.е. в нашем случае test), кроме file10.txt.
find . ! -name file10.txt -delete
Как вы видите в приведенном выше примере, тестовая папка содержит файлы того же типа, то есть файлы .txt. Что бы вы сделали, если бы в папке были файлы другого типа, например .mp3, .doc, .pdf и т. д.? Также легко сохранить файлы определенного типа в папке и удалить все остальное.
Допустим, наша тестовая папка содержит три файла .txt, три файла .mp3, три файла .doc и один файл .pdf.
ls test/
Пример вывода:
total 0
-rw-r--r-- 1 sk users 0 Mar 22 15:51 file10.pdf
-rw-r--r-- 1 sk users 0 Mar 22 15:51 file1.txt
-rw-r--r-- 1 sk users 0 Mar 22 15:51 file2.txt
-rw-r--r-- 1 sk users 0 Mar 22 15:51 file3.txt
-rw-r--r-- 1 sk users 0 Mar 22 15:51 file4.mp3
-rw-r--r-- 1 sk users 0 Mar 22 15:51 file5.mp3
-rw-r--r-- 1 sk users 0 Mar 22 15:51 file6.mp3
-rw-r--r-- 1 sk users 0 Mar 22 15:51 file7.doc
-rw-r--r-- 1 sk users 0 Mar 22 15:51 file8.doc
-rw-r--r-- 1 sk users 0 Mar 22 15:51 file9.doc
Как и в приведенном выше выводе, у меня в тестовой папке есть файлы четырех разных типов (pdf, txt, mp3, doc). Я хотел бы сохранить файлы с расширением .doc и удалить все остальное. Вот как я могу это сделать:
cd test/
rm !(*.doc)
Теперь давайте перечислим содержимое файла с помощью команды:
ls
Пример вывода:
file7.doc file8.doc file9.doc
Приведенная выше команда удаляет все в папке, кроме файлов с расширением .doc.
Точно так же вы можете сохранить два или более определенных типов файлов и удалить все остальное. Скажем, например, следующая команда сохранит файлы, содержащие расширения .doc и .mp3.
rm !(*.doc|*.mp3)
Теперь вы увидите, что файлы mp3 и doc не удалены.
ls
Пример вывода:
file4.mp3 file5.mp3 file6.mp3 file7.doc file8.doc file9.doc
Это всего лишь десять разных типов файлов. Просто представьте, что у вас есть сотни файлов. Было бы сложнее найти каждый тип файлов и удалить их вручную. Этот трюк выполнит всю работу всего за одну или две секунды.
Пожалуйста, будьте очень осторожны при использовании этих команд. Перед удалением файлов дважды проверьте путь к каталогу, чтобы избежать случайного удаления важных файлов.
Рекомендуем прочитать:
- Предотвращение случайного удаления или изменения файлов и папок в Linux
- Простой способ защитить файлы от случайного удаления в Linux
Надеюсь это поможет. Если вы найдете это руководство полезным, поделитесь им в своих социальных и профессиональных сетях и поддержите нас.
Впереди еще больше хороших вещей. Следите за обновлениями!
Ваше здоровье!