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

Я пытаюсь скопировать и переименовать файлы изображений из одного каталога в другой каталог.

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

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

Например, я хотел бы скопировать "2008_08_17_Transfer 001.jpg" файл из исходного каталога и переименовать его к "20090314001.jpg" в целевом каталоге и т.д для каждого файла в исходном каталоге, который запускается с "2008_08_17_Transfer".

Вот то, что я попробовал и сообщения об ошибках, которые я вижу:

$ ls -l
total 241968
-rw------- 1 stephen stephen  1347770 Mar 14  2009 2008_08_17_Transfer 001.jpg
-rw------- 1 stephen stephen  1077919 Mar 14  2009 2008_08_17_Transfer 002.jpg
-rw------- 1 stephen stephen  1359947 Mar 14  2009 2008_08_17_Transfer 003.jpg
-rw------- 1 stephen stephen  1309175 Mar 14  2009 2008_08_17_Transfer 004.jpg
-rw------- 1 stephen stephen  1404298 Mar 14  2009 2008_08_17_Transfer 005.jpg
...

for i in *.jpg ; do scp -p "$i" /media/stephen/WDMyBook1_ext4/PicturesRenamedByDateTaken/2009/20090314/20090314`echo "$i" ` ; done

001.jpg: No such file or directory
002.jpg: No such file or directory
003.jpg: No such file or directory
1
задан 21 November 2016 в 03:40

2 ответа

for i in *.jpg ; do 
  cp -p "$i" "/media/stephen/WDMyBook1_ext4/PicturesRenamedByDateTaken/2009/20090314/20090314${i##* }"
done

расширение параметра оболочки ${i##* } удаляет самый длинный префикс, заканчивающийся в пространстве (т.е. все до и включая пространство перед 00n.jpg числовой суффикс). Нет никакой потребности использовать echo.

я предполагаю, что это - локальная копия, таким образом, Вам не нужно scp.

Примечание: если Вы хотите к , происходят 20090314 программно от имени каталога, это выполнимо - но очевидно усложняет вещи немного.

2
ответ дан 7 December 2019 в 13:39

Просто поместите кавычки вокруг имени файла, как это

for i in *.jpg ; do scp -p "$i" "/media/stephen/WDMyBook1_ext4/PicturesRenamedByDateTaken/2009/20090314/20090314`echo "$i" `" ; done
0
ответ дан 7 December 2019 в 13:39

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

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