在我的目錄中,我有數千個 PDF 檔案。我想撰寫一個 shell 腳本,其中遍歷所有檔案并修剪最后 16 個字符,然后保存回目錄而不保留舊檔案名。
現在:KUD_1234_Abc_DEF_9055_01.pdf
新:KUD_1234.pdf
我該如何解決。
謝謝你們
uj5u.com熱心網友回復:
正確分析和描述問題以找到合適的解決方案的重要性。
在這里,我完全實作了您的要求:
#!/usr/bin/env sh
for oldname
do
# Capture old file name extension for re-use, by trimming-out the leading
# characters up-to including the dot
extension=${oldname##*.}
# Capture the old name without extension
extensionless=${oldname%.*}
# Compose new name by printing the old file name
# up to its length minus 16 characters
# and re-adding the extension
newname=$(
printf '%.*s.%s\n' $((${#extensionless}-16)) "$extensionless" "$extension"
)
# Demonstrate rename as a dummy
echo mv -- "$oldname" "$newname"
done
適用于您的示例案例:
mv -- KUD_1234_Abc_DEF_9055_01.pdf KUD_1234.pdf
會碰撞不會重命名這個:
mv -- KUD_1234_ooh_fail_666_02.pdf KUD_1234.pdf
不適用于少于 16 個字符的名稱:
mv -- notwork.pdf notwork.pdf
如果 name 沒有點擴展名,可能不會做你期望的事情:
mv -- foobar foobar.foobar
uj5u.com熱心網友回復:
這應該對您有用(請在嘗試前備份資料):
find -type f | sed -E 's|^(. )(.{16})(\.pdf)$|\1\2\3\ \1\3|g' | xargs -I f -- bash -c "mv f"
但是,使用 python 更容易:
import os
os.chdir("/home/tkhalymon/dev/tmp/empty")
for f in os.listdir("."):
name, ext = os.path.splitext(f)
os.rename(f, f"{name[:-16]}{ext}")
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/314547.html
