Bash 用逻辑-数学运算重命名
Bash rename with logical-mathematical operations
我的文件具有以下命名逻辑 .JPEG(旧相机)。 e.i., DSC01415.JPEG.
我的谜语是我想制作类似的东西:
mv DSC{1415..4131}.JPEG DSC{0001..3517}.JPEG
对于任何文件,这具有相同的效果:
mv DSC<number>.JPEG DSC<number-less-1414>.JPEG
请您尝试以下操作:
for ((i = 1415; i <= 4131; i++)); do
oldname=$(printf "DSC%04d.JPEG" "$i")
newname=$(printf "DSC%04d.JPEG" "$((i - 1414))")
if [[ -f $oldname && ! -f $newname ]]; then
echo mv -- "$oldname" "$newname"
fi
done
如果输出看起来不错,删除 echo
。
请确保在执行前创建备份,以免意外丢失您的珍贵照片。
我结束了在 closh (clojure-shell) 解决方案中的工作。好玩。而且,可能会用它做更多疯狂的事情。
#!/usr/bin/env closh-zero.jar
(defn split-reg [filename reg]
(str/split filename (re-pattern reg)))
;; ls |> (map #(split-reg % "teste")) |> (map second) |> \
;; (map #(split-reg % ".txt")) |> (map first) |> \
;; (map # (Integer/parseInt %))
(defn file-ids [file reg1 reg2]
(->
(split-reg file reg1)
(second)
((fn [s] (split-reg s reg2)))
(first)
((fn [s] (Integer/parseInt s)))))
(defn clj-rn [file reg1 arg reg2]
(sh mv (identity file) (str/join [reg1 arg reg2])))
在 closh shell 中,定义这些函数后,
ls |> (map #(file-ids % "DSC" ".JPG")) |> (map #(- % 1414)) |> (map str) |> (map #(clj-rn %1 "foto" %2 ".jpg")
(sh ls |> (identity)))
我的文件具有以下命名逻辑 .JPEG(旧相机)。 e.i., DSC01415.JPEG.
我的谜语是我想制作类似的东西:
mv DSC{1415..4131}.JPEG DSC{0001..3517}.JPEG
对于任何文件,这具有相同的效果:
mv DSC<number>.JPEG DSC<number-less-1414>.JPEG
请您尝试以下操作:
for ((i = 1415; i <= 4131; i++)); do
oldname=$(printf "DSC%04d.JPEG" "$i")
newname=$(printf "DSC%04d.JPEG" "$((i - 1414))")
if [[ -f $oldname && ! -f $newname ]]; then
echo mv -- "$oldname" "$newname"
fi
done
如果输出看起来不错,删除 echo
。
请确保在执行前创建备份,以免意外丢失您的珍贵照片。
我结束了在 closh (clojure-shell) 解决方案中的工作。好玩。而且,可能会用它做更多疯狂的事情。
#!/usr/bin/env closh-zero.jar
(defn split-reg [filename reg]
(str/split filename (re-pattern reg)))
;; ls |> (map #(split-reg % "teste")) |> (map second) |> \
;; (map #(split-reg % ".txt")) |> (map first) |> \
;; (map # (Integer/parseInt %))
(defn file-ids [file reg1 reg2]
(->
(split-reg file reg1)
(second)
((fn [s] (split-reg s reg2)))
(first)
((fn [s] (Integer/parseInt s)))))
(defn clj-rn [file reg1 arg reg2]
(sh mv (identity file) (str/join [reg1 arg reg2])))
在 closh shell 中,定义这些函数后,
ls |> (map #(file-ids % "DSC" ".JPG")) |> (map #(- % 1414)) |> (map str) |> (map #(clj-rn %1 "foto" %2 ".jpg")
(sh ls |> (identity)))