1.批次修改檔案內容
$find . -type f -exec sed -i 's/oldname/newname/g' {} +
#此命令含義:在當前目錄及其所有子目錄中查詢所有檔案,並對這些檔案執行 sed 命令,將檔案內容中的所有 oldname 字串替換為 newname。
#find .:從當前目錄(.)開始查詢檔案。
#type f:指定查詢的型別為檔案(file),這意味著 find 將僅查詢檔案,不包括目錄。
#-exec:對找到的每個檔案執行後面的命令。
#sed -i 's/oldname/newname/g':這是要執行的命令。sed 是一個流編輯器,用於對文字進行處理。
#- {}:是一個佔位符,代表 find 命令找到的檔名。
#+:表示 find 命令將所有匹配的檔名作為列表傳遞給 -exec 指定的命令,而不是一次傳遞一個檔名。這種方式可以提高執行效率,因為它減少了 sed 命令的呼叫次數。
2.批次修改檔名
- 指令碼如下:
在當前目錄及其所有子目錄下查詢所有檔名中包含"tmp"的檔案,並將這些檔案的檔名中的"tmp"替換為"xxx"
find . -type f -name '*tmp*' -exec sh -c '
file="$1"
dir="$(dirname "$file")"
base=$(basename "$file")
# 只替換檔名中的tmp為xxx
echo $base
newbase="${base//tmp/xxx}"
echo $newbase
if [ "$base" != "$newbase" ]; then
newfile="$dir/$newbase"
mv "$file" "$newfile"
fi
' _ {} \;
#-name '*tmp*':這個選項用來匹配檔名中包含"tmp"字串的檔案。
#-exec sh -c '...' _ {} \;:這個選項允許對匹配到的每個檔案執行指定的shell命令。這裡的sh -c是執行一段shell指令碼。