如何重命名不含副檔名的文件

如何重命名不含副檔名的文件

我有一堆文件,應該以程式設計方式重命名,以便應用程式可以理解。

他們有這樣的格式: 要重新命名的文件

我需要從末尾剪切直到第一個 _ 並將其替換為點(.)。

因為我事先不知道檔案名稱的長度,也不知道檔案名稱中 _ 的數量,所以您對 awk/sed/cut 有什麼想法嗎?

答案1

for F in *_*; do echo mv -- "${F}" "${F%_*}.${F##*_}"; done

如果輸出看起來正確,則刪除echo上面的命令。

訣竅是${F%_*}刪除最後一個_26${F##*_}刪除最後一個之前的所有內容_。嘗試這些命令看看它是如何工作的。分隔符號現在是:

echo "${PATH}"
echo "${PATH%:*}"
echo "${PATH##*:}"
echo "${PATH%:*}_${PATH##*:}"

答案2

使用sed

for file in *_*
do 
    echo mv $file $( sed 's/\(.*\)_/\1\./' <<< $file)
done

echo如果您滿意,請刪除。

答案3

sed您可以使用行尾標記 ( )將最後一個區塊替換為$

#/bin/bash
for file in *_* ; do
  #any alphanumeric string as suffix
  mv $file $( sed 's/_\([A-Za-z0-9]\{1,\}\)$/.\1/' <<< $file )
  #alternatively numbers only as in given input sample
  mv $file $( sed 's/_\([0-9]\{1,\}\)$/.\1/' <<< $file )
done

AFAIK\{1,\}前面清單中的「一個或多個」位元是 GNU sed- 但我不能 100% 確定這個限制。

相關內容