У меня есть целая куча файлов, которые выглядят примерно так:
x54y65.dat
, и я хочу поставить перед ними префикс конкретной фразы, чтобы они выглядели так:
some prefix - x54y65.dat
Это то место после дефиса, которое меня достает.
Я пытался:
mv * some\ prefix\ -\ *
, но это не сработало. Как мне это сделать? Благодаря
Хотя исходный ответ автора правильный, я думаю, что лучше объяснить, почему команда mv
, приведенная в вопросе, не работает.
Проблема заключается в базовом недоразумении о том, как работает оболочка Unix - что совершенно отличается от командной строки DOS. Специальные символы (*,? И т. Д.), Которые выбирают несколько файлов (они называются 'glob'), работают на уровне оболочки, а не команд. Итак, первая команда расширяется оболочкой до
mv x54y56.dat x57y58.dat x59y60.dat "some prefix - *"
Я предполагаю, что в каталоге у вас есть только эти три файла для простоты, и что у вас нет файла, который соответствует имени "some prefix - "
шаблон --- так что оболочка, вероятно, позволит ему как есть. (Я использую кавычки для встраивания пробелов, я нахожу это более легко читаемым, чем обратные зазоры, хотя тонкие детали в руководстве для вашей оболочки).
Теперь mv a b c d
попытается переместить файлы a
, b
, c
в каталог d
, и потерпит неудачу - потому что d
не существует.
Решение rename
, если у вас есть команда rename
, является правильным. Как обнаружил ОП,
rename 's//some prefix - /' *.dat
работает нормально. В старые добрые времена вы должны были
for i in *.dat; do
mv "$i" "some prefix - $i"
done
делать только один ход за раз.
rename 's//some prefix - /' *.dat
При этом используется синтаксис типа regex для переименования всех файлов с указанным расширением (.dat) в одну строку. Он легко обрабатывает пробелы, так как принимает любые символы, заключенные в /