Як я можу видалити всі файли з певним розширенням у певній папці?


36

Якщо я встановив поточний / робочий каталог (навігація до нього за допомогою cd) в якийсь конкретний каталог, а потім введіть:

rm *.xvg

Що буде робити ця команда? Чи правда, що вищевказана команда видалить файли лише з розширенням .xvg лише у робочому каталозі?

Я нервував спроби цього, перш ніж запитувати, тому що я хочу бути абсолютно впевненим, що вищевказана команда видалить лише .xvgфайли, розташовані в РОБОТІ ДИРЕКТОРІЇ .

Відповіді:


34

Так, rm *.xvgбуде тільки видалити файли з зазначеним розширенням в вашому поточному каталозі.

Хороший спосіб переконатися , що ви дійсно в директорії , яку ви хочете видалити файли, щоб використовувати pwdкоманду , яка буде відображати поточну директорію , а потім виконати команду , lsщоб підтвердити , що ви знайшли файли , які ви очікували.

Якщо ви трохи заклопотані щодо видачі rmкоманди, ви можете зробити дві речі:

  1. введіть, ls *.xvgщоб переглянути список тих файлів, на які вплине ця команда.

  2. Якщо у вас багато файлів, ви також завжди можете використовувати -iперемикач командного рядка для rm(також існує для cpта mv). Використання rm -i *.xvgможе запропонувати вам кожен окремий файл, якщо видалити його нормально, тож ви можете бути впевнені, що нічого, чого ви не очікували, буде видалено. (Це буде нудно, якщо у вас багато файлів :)


1
Також: rm -f {*.xvg,.*.xvg}для видалення також прихованих файлів. І rm -R -f {*.xvg,.*.xvg}видаляти також каталоги.
Дор

20

Вам не потрібно переходити до dir, просто користуйтеся

rm /some/dir/*.xvg 

Якщо у вас є помилка друку або подібна помилка на шляху, де / som / dir не існує:

cd /som/dir
rm *.xvg

випадково видалить усі .xvg-файли в поточному режимі. Перша команда не буде, і вам не потрібно повторно копіювати файли.

Альтернативним способом було б використання пошуку:

find /some/dir/ -maxdepth 1 -type f -name "*.xvg" -delete 

find / some / dir / -maxdepth 1 -тип f -name "* .xvg" -delete працював на мене! використовуйте -maxdepth "n" для видалення відповідних файлів у підкаталозі, якщо заданий шлях
Vinay

3

Так, rm *.xvgбуде видалено лише ті файли, які закінчуються .xvgу вашому поточному каталозі. Ось чому.

Коли ви вводите таку команду, робота розбивається між оболонкою, яку ви використовуєте (припустимо, bash) і бінарною командою.

Ви можете знайти бінарне, ввівши which rm. Ця маленька програма піклується про від’єднання файлів. Такі програми можна запускати з командного рядка і можуть читати список аргументів prog arg1 arg2 arg3під час їх запуску. У разі rmвони трактуються як список повністю кваліфікованих імен файлів, які потрібно видалити. Отже, якщо ви знаходитесь в каталозі, що містить файл foo.bar, введення тексту delete 'foo.*'призведе до rm: foo.*: No such file or directory. Зверніть увагу на одиничні лапки навколо шаблону файлу, вони говорять оболонці передати аргумент оболонці таким, яким він є.

Однак якщо ви введете rm *.barв одному каталозі, він видалить файл. Тут відбувається те, що ваша оболонка, яка є програмою, яку ви використовуєте для введення команд, виконує деякі перетворення, перш ніж передавати аргументи команді. Одне з них називається "розширення імені файлу", інакше його називають "глобальним". Список розширень імені файлів bash можна переглянути тут . Одне з найпоширеніших розширень - *це розширене до назви файлів у поточному каталозі.

Простий спосіб поглянути на глобус на роботі - це використання echo, який виводить назад всі аргументи, передані йому через оболонку. Таким чином, введення echo *в один і той же каталог виведе foo.bar. Отже, коли ви вводите rm *.bar, що насправді відбувається, це те, що оболонка розширює список аргументів на foo.bar, а потім передає це rmкоманді.

Існують деякі способи контролю глобалізації. Наприклад, в останніх версіях bash можна ввімкнути опцію під назвою globstar, яка буде робити рекурсивне розширення. Введення тексту echo **/*.barпокаже список усіх файлів, що закінчуються .barу всіх підпапках. Отже, набравши rm **/*.barbash з включеною глобальною програмою, рекурсивно видалять усі відповідні файли в підпапках.


1

Команда:

  rm ./*.pgm

працює для мене

Команда:

rm *.pgm

дає команду про помилку (польською, перекладеною):

rm: wrong option - '1'
Use "rm ./-1000.pgm" to delete the file '-1000.pgm'.
Write "rm --help" for information.

в

bash --version
GNU bash, wersja 4.4.19(1)-release (x86_64-pc-linux-gnu)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.