Как переименовать пакет файлов через CLI при наличии пробелов

У меня есть целая куча файлов, которые выглядят примерно так:

x54y65.dat

, и я хочу поставить перед ними префикс конкретной фразы, чтобы они выглядели так:

some prefix - x54y65.dat

Это то место после дефиса, которое меня достает.

Я пытался:

 mv * some\ prefix\ -\ *

, но это не сработало. Как мне это сделать? Благодаря

1
задан 4 November 2013 в 05:34

3 ответа

Хотя исходный ответ автора правильный, я думаю, что лучше объяснить, почему команда 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

делать только один ход за раз.

0
ответ дан 4 November 2013 в 05:34
rename 's//some prefix - /' *.dat

При этом используется синтаксис типа regex для переименования всех файлов с указанным расширением (.dat) в одну строку. Он легко обрабатывает пробелы, так как принимает любые символы, заключенные в /

0
ответ дан 4 November 2013 в 05:34
mv x54y65.dat "some prefix - x54y65.dat"
0
ответ дан 4 November 2013 в 05:34
  • 1
    Забыл добавлять I' m под управлением Linux Mint 18 64-разрядной Корицы, Коричная версия 3.0.7 на 4.4.0-45-универсальном Ядре – Clyde B 22 October 2016 в 18:33

Другие вопросы по тегам:

Похожие вопросы: