Linux переименовывать с использованием параметров и пробелов?

939
Torben Gundtofte-Bruun

Возможно ли в Linux переименовать файл из чего-то без пробелов во что-то, содержащее пробелы?

Я знаю, что могу создавать каталоги и файлы с пробелами, выполнив:
mkdir "new dir"и:
touch "new file.txt"

Я хочу переименовать файлы из:
imgp0882.jpgв что-то вроде:
20091231 1243 some topic.jpg

И как это будет выглядеть в сценарии оболочки, который использует такие параметры, как :?
for i in *.jpg do
rename "$i" "$somepath/$mydate $mytime $mytopic$extension"

Немного предыстории:

  • Я новичок в Linux (использую PCLinuxOS 2009.2), пришедший из Windows, и я написал небольшой сценарий оболочки для загрузки файлов с моей камеры, а затем автоматически переименовываю их в соответствии с шаблоном даты и темы. Как вы уже догадались, я немного застрял в переименовании.
  • Если вы хотите увидеть мой сценарий, вот копия .
  • Я не использую jheadэто переименование, потому что это работает только с файлами JPEG, но я хочу одно решение для любого медиаформата, включая видео.
0
Вы должны знать, что * операции * перемещения и переименования в Linux в основном эквивалентны, и обе выполняются с использованием `mv`. Команда rename предназначена для переименования целого пакета файлов одновременно по некоторому шаблону. Его использование более сложное. Ryan Thompson 14 лет назад 0
Спасибо, это отличный комментарий, поскольку он сильно отличается от (не) одинаковых команд DOS / Windows. Очевидно, что `mv` - это путь. Torben Gundtofte-Bruun 14 лет назад 0

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

2
Broam

Если вы используете bash, используйте обратную косую черту:

My\ File\ Name.jpg

Таким образом, в сценарии, который будет: переименовать $ inputfile $ date \ $ time \ topic $ ext? Я думаю, что попробовал это, и оно просто не переименовало, но и не выдало ошибку. Я попробую еще раз и доложу. Torben Gundtofte-Bruun 14 лет назад 0
2
whitequark

Может быть, вам нужно просто поставить кавычки вокруг всего пути назначения? Например

$ touch test $ a=one $ b=two $ mv "test" "$a $b" $ ls -la total 8 -rw-r--r-- 1 whitequark whitequark 0 2010-01-27 01:21  -rw-r--r-- 1 whitequark whitequark 0 2010-01-27 01:20  drwxr-xr-x 2 whitequark whitequark 4096 2010-01-27 01:21 . drwxr-xr-x 80 whitequark whitequark 4096 2010-01-27 01:16 .. -rw-r--r-- 1 whitequark whitequark 0 2010-01-27 01:21 one two 
ах, использование команды перемещения вместо переименования - хороший трюк. Я посмотрю, смогу ли я заставить это работать в моем сценарии. Torben Gundtofte-Bruun 14 лет назад 0
`rename` используется для переименования запасов файлов в соответствии с регулярным выражением; это не стандартный способ переименования файлов в * nix, несмотря на его имя и даже не стандартный инструмент: он предоставляется Perl. Смотрите `man rename` для деталей. http://superuser.com/questions/70217/is-there-a-linux-command-like-mv-but-with-regex - это вопрос, прямо противоположный вашему. Обратите внимание на первый ответ. whitequark 14 лет назад 1

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