Linux

縮短 Linux 文件名(在符號上截斷)

  • April 21, 2021

我有一個要縮短的 Linux 文件列表。它們採用以下格式:WhatIWant_WhatIDoNotWant.txt。

有沒有一種簡單的方法來製作它們:WhatIWant.txt?我看到了以下問題(下面的連結),我真的很喜歡 for do 循環(以防結果重複),但我不知道如何獲取下劃線 (_) 的位置值以將其輸入而不是使用第 16 個字元作為結束點…

用於縮短文件名的 Linux 腳本或程序

# 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

可能就足夠了,但要注意是否有任何文件具有嵌入的返回字元;那會打破這個循環。

引用自:https://unix.stackexchange.com/questions/305113