6

Я обычно использую какой-то дистрибутив Linux на основе Debian; либо Debian 7.8, либо Linux Mint 17. У меня есть разделенный RAR-файл, например:

filename.rar
filename.r01
filename.r02
filename.r03
etc ...

Добыв архив с помощью dtrx или unrar я хотел бы, чтобы удалить все файлы деталей из расщепленного архива , используя, предпочтительно одну строку.

На данный момент я выполняю команду rm filename.r* , которая в целом работает хорошо, однако, если файлы имеют имя, например rabbid.ranger.robot.r01 он также может удалить извлеченный каталог rabbid.ranger.robot .

Поэтому я ищу что-то более надежное.

Примет и короткий сценарий.

3 ответа3

10

Предположим , у вас есть раздвоение RAR с частями пронумерованных до 12 (то есть, filename.r12 как ваш последний файл) , и вы хотите быть очень осторожным , чтобы не удалить любые другие файлы. Предполагая, что bash является вашей оболочкой, и вы используете версию 4 или выше (bash --version для проверки), вы можете легко создать явный список файлов с помощью расширения скобки:

rm filename.rar filename.r{01..12}

Это удалит только эти файлы: даже файлы с именем filename.rtf (или filename.r13) будут сохранены. В зависимости от того, что другие файлы , у вас есть (или могут иметь) в папке, это может или не может быть предпочтительнее в обычно довольно хороший .r??способ, предложенный Деваном.

Расширение скобок, включая числовые диапазоны, является очень старой особенностью нескольких оболочек. Но до версии 4 bash не поддерживал заполнение нулями (т. Е. Вам нужны такие имена , как filename.r05 , а не filename.r5).

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

$ echo filename.rar filename.r{01..12}
filename.rar filename.r01 filename.r02 filename.r03 filename.r04 filename.r05 filename.r06 filename.r07 filename.r08 filename.r09 filename.r10 filename.r11 filename.r12

(Вы можете проверить выражения с помощью * или ? и в этом случае - просто помните, что то, во что он расширяется, зависит от того, в какой папке вы находитесь, когда запускаете команду.)

6

В зависимости от количества имеющихся у вас файлов .r0* вы можете заменить * на ? это удалит файлы, которые имеют .r0 и 1 другой символ. Таким образом, он удалит rabbid.ranger.robot.r01 но не rabbid.ranger.robot.r010 В общем, я бы использовал его так:

rm filename.r??
4

Вы можете использовать команду find ; из рабочего каталога:

find . -type f -name "filename.*" -exec rm  {} \;

Это ищет только файлы, которые соответствуют, каталоги исключены. Хорошей идеей будет сначала протестировать команду с помощью команды ls а не rm чтобы убедиться, что она возвращает желаемые результаты.

find . -type f -name "filename.*" -exec ls {} \;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .