Linux

將子目錄中的多個文件重命名為其目錄名

  • November 18, 2018

我的桌面上有一個名為 Models 的文件夾。在該文件夾中,有帶有 jpeg 文件且不帶 .jpg 副檔名的命名文件夾。jpeg 文件名是隨機散列。我想使用 bash 腳本將這些 jpeg 文件批量重命名為具有增量的目錄名稱,並在每個文件上附加 .jpg 副檔名。

基本上是這樣的

楷模/

Alice/
     a5ccB2ff3e
     ee420bc4a
     2acee54dc
     ...
Alex/
     de33fa24c0
     d1eaa48e0a
     ...

我想成為

楷模/

Alice/
     Alice001.jpg
     Alice002.jpg
     Alice003.jpg
     ...

Alex/
     Alex001.jpg
     Alex002.jpg
     ...

根據您對問題的描述,我假設總數沒有。文件夾中的文件不超過 999。

這是一個簡單的 bash 腳本,在您的頂層目錄(即模型)中執行它:

#!/bin/bash
for i in ./*
do
if [ -d "$i" ]
then
j=001
for k in "$i"/*
do
mv "$k" "$i"/"$i""$j".jpg
j=${j#0}
if [ ${j:0:1} -eq 0 ]
then 
j=${j#0}
fi
(( j++ ))
j=`printf '%03i' $j`
done
fi
done

它將首先檢查模型中的每個文件,無論它是不是一個目錄if [ -d "$i" ]。然後對於此目錄中的每個文件,它將更改它們的名稱mv "$k" "$i"/"$i""$j".jpg。和

j=${j#0}
if [ ${j:0:1} -eq 0 ]
then 
j=${j#0}
fi

上面的程式碼將從頭開始刪除所有零,這樣您就不會收到如下錯誤:

((: 008: value too great for base (error token is "008")
printf: 008: invalid octal number

j=`printf '%03i' $j`

將使值j長為 3 位。

引用自:https://unix.stackexchange.com/questions/482481