Как расширить имя переменной и подстановочный знак в имени файла?

1161
Nathan Long

У меня есть скрипт bash, где $DIRимя каталога, которое может содержать пробелы.

Это:

rm "$DIR/*.MOV" 

выдает ошибку "Нет такого файла или каталога". Нет файла с буквальным названием "* .MOV"; Я хочу *расширить в несколько аргументов - по одному на соответствующее имя файла.

Например:

rm some\ folder/foo.MOV some\ folder/bar.MOV 

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

0

2 ответа на вопрос

4
Cyrus

Quoting prevents globbing. Try this with GNU bash:

rm "$DIR"/*.MOV 
Я обычно использую `{}`, когда хочу добавить или изменить что-то в моей переменной, например: `$ / *. MOV`. Я не знаю, какой из них лучше, но использование `{}` работает для моих случаев использования каждый раз. jena 5 лет назад 0
-1
Nathan Long

A workaround:

for FILE in `ls "$DIR" | grep .MOV`; do rm "$DIR/$FILE" done 
[Почему вы не должны анализировать вывод `ls`] (https://mywiki.wooledge.org/ParsingLs). Kamil Maciorowski 6 лет назад 0
@KamilMaciorowski - Не лучше ли не использовать переводы строк в именах файлов? Кто бы это сделал? Я не системный администратор, я работаю над файлами данных, созданными мной и моими коллегами, и хотя один из них является сумасшедшим (ADHD среди прочего), добавление новых строк в имена файлов просто безумие, и я бы исправил такое имя файла. В ссылке они даже предлагают ввести временные метки в имя файла, просто чтобы не вставлять в них * новые строки - wtf? jena 5 лет назад 0
@jena Не лучше ли не разлить масло на пол? Кто бы это сделал? Может быть * жулик *, который хочет * использовать * тот факт, что вы небрежны. Кроме того: случаются аварии, плохо написанные архиваторы распаковывают файлы со странными именами и т. Д. Если вы хотите разобрать `ls`, это ваш выбор, вас предупредили. Люди, которые хотели бы использовать этот ответ в своих проектах, где они имеют дело с * именами файлов неизвестного происхождения *, также должны быть предупреждены, прежде чем они будут слишком "rm". Kamil Maciorowski 5 лет назад 0
Я частично согласен, как я уже сказал, я не системный администратор, а ученый, поэтому я обычно работаю над защищенными кластерами над файлами, созданными мной и коллегами. Если я использую стандартные инструменты и работаю с здравомыслящими людьми, я могу хорошо разобрать `ls`, я прав? jena 5 лет назад 0