Команда Bash для удаления начальных нулей из всех имен файлов

У меня есть каталог с набором файлов с именами как:

001234.jpg
001235.jpg
004729342.jpg

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

1234.jpg
1235.jpg
4729342.jpg

Я пробовал различные конфигурации sed, но я не могу найти правильный синтаксис. Существует ли простой способ перечислить все файлы в каталоге, передать его по каналу через sed, и или переместить или скопировать их в новое имя файла без начальных нулей?

8
задан Foggzie 13 March 2016 в 16:51
поделиться

8 ответов

for FILE in `ls`; do mv $FILE `echo $FILE | sed -e 's:^0*::'`; done
.
10
ответ дан 5 December 2019 в 05:45
поделиться

вот тот, который не требует 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
0
ответ дан 5 December 2019 в 05:45
поделиться

В Bash, который, вероятно, будет ваша система входа в систему по умолчанию, внешние команды не нужны.

shopt -s extglob
for i in 0*[^0]; do mv "$i" "${i##*(0)}"; done
7
ответ дан 5 December 2019 в 05:45
поделиться
-

Я не знаю SED вообще, но вы можете получить список с помощью Найти :

Найти -type F -name * .jpg

Так что с другим ответом это может выглядеть

Найти. -type f -name * .jpg | Sed -e: ^ 0 * :: '

, но я не знаю, если это команда SED SOMPORTING или нет.

0
ответ дан 5 December 2019 в 05:45
поделиться

Может быть, не самый элегантный, но он будет работать Отказ

for i in 0*
do
mv "${i}" "`expr "${i}" : '0*\(.*\)'`"
done
0
ответ дан 5 December 2019 в 05:45
поделиться

В Bash Shell вы можете сделать:

shopt -s nullglob
for file in 0*.jpg
do
   echo mv "$file" "${file##*0}"
done
0
ответ дан 5 December 2019 в 05:45
поделиться

sed само по себе является неправильным инструментом для этого: необходимо также использовать какой-нибудь скриптинг оболочки.

Проверьте Переименуйте несколько файлов на странице Linux для получения некоторых идей. Одна из предложенных идей - использовать переименование perl скрипт:

rename 's/^0*//' *.jpg
11
ответ дан 5 December 2019 в 05:45
поделиться

Попробуйте использовать sed, например:

sed -e 's:^0*::'

Полный цикл:

for f in `ls`; do
   mv $f $(echo $f | sed -e 's:^0*::')
done
1
ответ дан 5 December 2019 в 05:45
поделиться
Другие вопросы по тегам:

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