В некоторых каталогах у меня есть много файлов с именем
...
DSC_0002
DSC_0005
DSC_0010
...
Я хочу переименовать / переименовать файлы
FILE_0001
FILE_0002
...
Мэйби, мне нужно будет начать нумерацию НЕ с 0001
Допустим, каталог, содержащий эти файлы, - /path /to /dir
скрипт, который вам нужен, будет выглядеть так:
start=1
cd "/path/to/dir"
for file in ./*;do
mv "${file}" "FILE_$(printf "%04d" $start)"
start=$((start+1))
done
пытаться
ls | awk '{printf "mv %s FILE_%04d\n",$0,NR ;} ' | bash
remove |
часть bash для предварительного просмотра.NR+666
чтобы начать с 667.%02d
или %06d
чтобы создать 01 или 000001 подобную фигуру.Вы можете сделать что-то вроде:
#!/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
даже если в вашем случае это не должно быть реальной проблемой, поскольку для файлов должно быть стандартное имя с камеры DSC_nnnn.jpg
.
.jpg
или .tif
или .raw
)... изменить его или стереть в скрипте в соответствии с вашими потребностями.