Linux
縮短 Linux 文件名(在符號上截斷)
我有一個要縮短的 Linux 文件列表。它們採用以下格式:WhatIWant_WhatIDoNotWant.txt。
有沒有一種簡單的方法來製作它們:WhatIWant.txt?我看到了以下問題(下面的連結),我真的很喜歡 for do 循環(以防結果重複),但我不知道如何獲取下劃線 (_) 的位置值以將其輸入而不是使用第 16 個字元作為結束點…
# We loop over the files with filename suffix .txt for f in *.txt; do # We rename the file removing _ and the remaining part including the extension mv -- "$f" "${f/_*}.txt" done
變數擴展
${varname%_*}
將剝離從(最後)_
到字元串末尾的所有內容。所以,例如
$ name=WhatIWant_WhatIDontWant.txt $ echo "${name%_*}" WhatIWant
請注意,它還會刪除
.txt
.所以我們可以建立一個簡單的循環:
for name in *.txt do mv -i -- "$name" "${name%_*}.txt" done
如果你想要這個遞歸然後像
find . -name '*.txt' | while read -r "name" do mv -i "$name" "${name%_*}.txt" done
可能就足夠了,但要注意是否有任何文件具有嵌入的返回字元;那會打破這個循環。