В каком-то каталоге у меня много файлов с именами
...
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
даже если в вашем случае это не должно быть реальной проблемой, потому что у вас должны быть файлы со стандартным именем из cameraDSC_nnnn.jpg
.- Обычно есть расширение (возможно,
.jpg
или.tif
или.raw
)... измените или удалите его в скрипте в соответствии со своими потребностями.