重新命名/重新枚舉目錄中的文件

重新命名/重新枚舉目錄中的文件

在某個目錄中,我有許多名為

...
DSC_0002
DSC_0005
DSC_0010
...

我想要重命名/重新枚舉文件

文件_0001
文件_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 開始。
  • 使用%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可能是危險的。它可以覆蓋現有文件。它可以移動/重命名目錄。因此,最好在執行腳本之前進行目視檢查。然後你可以在 shell 中透過管道傳輸它的輸出:
    例如 ./Myscript.sh,一切都好嗎?如果是,那麼您可以編寫./Myscript.sh | /bin/bash(或者您可以修改它以消除“迴聲”或下一行中的註釋)。
  • 最好這樣寫mv -i:覆蓋之前會提示
  • DSC_*如果目前目錄中沒有文件shopt -s nullglob,將避免擴充錯誤。

  • 一般來說解析不安全的輸出ls即使在您的情況下,這應該不是真正的問題,因為您應該為檔案使用camera的標準名稱DSC_nnnn.jpg

  • 通常有一個擴展名(可能是.jpg.tif.raw)...在腳本中更改或刪除它以滿足您的需求。

相關內容