我一直在嘗試使用 xargs 以正確的順序重命名一堆檔案,但無濟于事。在挖掘成堆的類似問題時,我找到了使用 sed 和 xargs 的答案。新手我想避免使用 sed。我想一定有一些更簡單的方法。
更具體地說,我有一些檔案如下:
Abc.jpg
Def.jpg
Ghi.jpg
Jkl.jpg
我希望這些以有序的方式重命名,例如:
Something1.jpg
Something2.jpg
Something3.jpg
Something4.jpg
xargs命令可以seq實作這一點嗎?如果是這樣,我該如何實施?
uj5u.com熱心網友回復:
我不知道為什么有人會為此嘗試參與sed。可能不是,xargs或者seq,要么。這是一個純 Bash 單線:
(x=1; for f in *.jpg; do mv "$f" "Something$((x )).jpg"; done)
從本質上講,這是for對要重命名的檔案的回圈,對mv每個檔案執行一個命令。要操作的檔案通過單個 glob 運算式表示,但您也可以單獨命名它們、使用多個 glob 或使用多種其他技術之一。變數x用作簡單的計數器,在進入回圈之前初始化為 1。 $((x ))擴展為 的當前值x,并具有遞增 1 的副作用x。整個事物都包裹在括號中以在子 shell 中運行,因此其中的任何內容都不會影響主機 shell 環境。(在這種情況下,這意味著它不會x在呼叫 shell 中創建或修改任何變數。)
如果您將其放在腳本中而不是在命令列中鍵入,那么將其拆分為幾行會更具可讀性:
(
x=1
for f in *.jpg; do
mv "$f" "Something$((x )).jpg"
done
)
如果您愿意,您也可以這樣輸入。
uj5u.com熱心網友回復:
這是一個如何查找、編號和重命名 jpg 的示例。無論您如何使用查找(您需要什么選項。遞回,最小深度,最大深度,正則運算式,...)。
您可以添加數字以查找輸出,nl并將數字和檔案用作 xargs 的 2 個引數$1, $2
$ find . -type f -name "*.jpg" |nl| xargs -n 2 bash -c 'echo mv "$2" Something"$1".jpg' argv0
回聲echo mv ... 會顯示這個
mv ./Jkl.jpg Something1.jpg
mv ./Abc.jpg Something2.jpg
mv ./Def.jpg Something3.jpg
使用排序和測驗引數的數量
$ find . -type f -name "*.jpg" |sort|nl| xargs -n 2 bash -c '[ "$#" -eq 2 ] && echo mv "$2" Something"$1".jpg' argv0
mv ./Abc.jpg Something1.jpg
mv ./Def.jpg Something2.jpg
mv ./Jkl.jpg Something3.jpg
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491422.html
