Переименовать/перенумеровать файлы в каталоге

Переименовать/перенумеровать файлы в каталоге

В каком-то каталоге у меня много файлов с именами

...
DSC_0002
DSC_0005
DSC_0010
...

Я хочу переименовать/перенумеровать файлы

ФАЙЛ_0001
ФАЙЛ_0002
...

Мэйби, мне нужно начать нумерацию НЕ с 0001

решение1

Допустим, каталог, содержащий эти файлы, — /path/to/dir, тогда
нужный вам скрипт будет выглядеть следующим образом:

start=1
cd "/path/to/dir"
for file in ./*;do
  mv "${file}" "FILE_$(printf "%04d" $start)"
  start=$((start+1))
done

решение2

пытаться

ls | awk '{printf "mv %s FILE_%04d\n",$0,NR ;} ' | bash
  • убедитесь, что ни один файл не имеет странных названий.
  • remove |часть bash для предварительного просмотра.
  • используйте NR+666для начала с 667.
  • используйте %02dили %06dдля генерации 01 или 000001 подобной цифры.

решение3

Вы можете сделать что-то вроде:

#!/bin/bash 
Counter=${1:-1}   # It will take the starting number as 1st parameter
WhichDir=${2:-.}  # It will take the path as 2nd parameter

                  # We try to see if the directory exists and if you can go there
(cd "$WhichDir" 2>/dev/null) || { echo "# $WhichDir NOT FOUND " ; exit 1; }

cd "$WhichDir"                            # it exists and you can go there
shopt -s nullglob                         # see notes
for f in DSC_*                            # for all the files in this dir
do
  New_Name=$(printf "FILE_%04d.jpg" $Counter)
                                          # change .jpg in what you need
  Counter=$(($Counter +1))                # increase the counter
  echo "mv -i \"$f\" \"$New_Name\" "      # the -i will prompt before overwrite
  # mv -i "$f" "$New_Name"                # uncomment this line to make it works
exit 0

Примечания

  • Когда тыигратьс mvможет быть опасно. Он может перезаписывать существующие файлы. Он может перемещать/переименовывать каталог. Поэтому лучше провести визуальную проверку перед выполнением скрипта. Затем вы можете передать его вывод в оболочку:
    например ./Myscript.sh, все в порядке? Если да, то вы можете писать ./Myscript.sh | /bin/bash(или вы можете изменить его, удалив "echo" или комментарий в следующей строке).
  • Лучше написать mv -i: он подскажет перед перезаписью
  • DSC_*Если в текущем каталоге нет файлов, это shopt -s nullglobпозволит избежать ошибок расширения.

  • В общемне безопасно анализироватьвыходlsдаже если в вашем случае это не должно быть реальной проблемой, потому что у вас должны быть файлы со стандартным именем из camera DSC_nnnn.jpg.

  • Обычно есть расширение (возможно, .jpgили .tifили .raw)... измените или удалите его в скрипте в соответствии со своими потребностями.

Связанный контент