У меня есть каталог с набором файлов с именами как:
001234.jpg
001235.jpg
004729342.jpg
Я хочу удалить начальные нули из всех имен файлов, таким образом, со мной оставили бы:
1234.jpg
1235.jpg
4729342.jpg
Я пробовал различные конфигурации sed, но я не могу найти правильный синтаксис. Существует ли простой способ перечислить все файлы в каталоге, передать его по каналу через sed, и или переместить или скопировать их в новое имя файла без начальных нулей?
for FILE in `ls`; do mv $FILE `echo $FILE | sed -e 's:^0*::'`; done
. вот тот, который не требует SED
:
for x in *.jpg ; do let num="10#${x%%.jpg}"; mv $x ${num}.jpg ; done
Обратите внимание, что Это работает только тогда, когда имена файлов есть все номера. Вы также можете удалить ведущие нули, используя оболочку:
for a in *.jpg ; do dest=${a/*(0)/} ; mv $a $dest ; done
В Bash, который, вероятно, будет ваша система входа в систему по умолчанию, внешние команды не нужны.
shopt -s extglob
for i in 0*[^0]; do mv "$i" "${i##*(0)}"; done
Я не знаю SED вообще, но вы можете получить список с помощью Найти
:
Найти -type F -name * .jpg
Так что с другим ответом это может выглядеть
Найти. -type f -name * .jpg | Sed -e: ^ 0 * :: '
, но я не знаю, если это команда SED SOMPORTING или нет.
Может быть, не самый элегантный, но он будет работать Отказ
for i in 0*
do
mv "${i}" "`expr "${i}" : '0*\(.*\)'`"
done
В Bash Shell вы можете сделать:
shopt -s nullglob
for file in 0*.jpg
do
echo mv "$file" "${file##*0}"
done
sed
само по себе является неправильным инструментом для этого: необходимо также использовать какой-нибудь скриптинг оболочки.
Проверьте Переименуйте несколько файлов на странице Linux для получения некоторых идей. Одна из предложенных идей - использовать переименование
perl скрипт:
rename 's/^0*//' *.jpg
Попробуйте использовать sed
, например:
sed -e 's:^0*::'
Полный цикл:
for f in `ls`; do
mv $f $(echo $f | sed -e 's:^0*::')
done