linux-批次修改檔案內容

little小新發表於2024-07-22

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指令碼。

相關文章