일부 디렉토리에는 다음과 같은 이름의 파일이 많이 있습니다.
...
DSC_0002
DSC_0005
DSC_0010
...
파일 이름을 바꾸거나 파일을 다시 열거하고 싶습니다
FILE_0001
FILE_0002
...
Maby, 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에서 시작하는 데 사용합니다 .- 그림과 같이 01 또는 000001을 생성하려면
%02d
또는 를 사용하세요 .%06d
답변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
(또는 "에코" 또는 다음 줄의 주석을 지우고 수정할 수 있습니다). - 작성하는 것이 더 좋습니다
mv -i
. 덮어쓰기 전에 메시지가 표시됩니다. DSC_*
현재 디렉토리에 파일이 없으면shopt -s nullglob
확장 오류가 발생하지 않습니다.일반적으로구문 분석하는 것은 안전하지 않습니다.출력
ls
비록 귀하의 경우에는 실제 문제가 되지 않더라도 파일에 대해 카메라의 표준 이름이 있어야 하기 때문입니다DSC_nnnn.jpg
.- 일반적으로 확장자가 있습니다(
.jpg
또는.tif
또는.raw
)... 필요에 맞게 스크립트에서 변경하거나 지우십시오.