Unix

Shell命令刪除文件副檔名

  • September 23, 2009

我有一個包含自動生成的文件的目錄,這些文件都以 .sample 副檔名結尾。我想有一種方法可以在一個終端命令中從它們中刪除 .sample 副檔名。

我試過這個:

mv ./{$1}*.sample ./$1

但這不起作用,因為我肯定將 {$1} 放置在錯誤的位置或方式。誰能指出正確的方向?

提前致謝。

做到這一點的眾多方法之一:

for i in *.sample; do NEWNAME=`echo "$i" | sed 's/\.sample//'`; mv "$i" "$NEWNAME"; done
$ touch {a,b,c,"white space"}.sample

$ ls *.sample
a.sample        c.sample
b.sample        white space.sample

$ for SAMPLE in *.sample; do mv -v "$SAMPLE" "${SAMPLE%.sample}"; done
a.sample -> a
b.sample -> b
c.sample -> c
white space.sample -> white space

編輯:另見${parameter#word}word從前面刪除parameter

$ FILENAME=140909_stats_report.txt
$ echo "${FILENAME#140909_}"
stats_report.txt

我記得我需要從我的(英國)鍵盤上的#和鍵的位置中需要哪些:在左側是這樣的匹配項。在我注意到我每次都必須檢查手冊頁之前:~)%``#``%

這些擴展還支持 shell 萬用字元:

$ echo "${FILENAME%.*}"
140909_stats_report

#和形式匹配的%最短擴展word。您可以使用##%%進行最長匹配。例如:

$ FILENAME=140909_stats_report.txt
$ echo "${FILENAME#*_}"  # match as little as possible
stats_report.txt
$ echo "${FILENAME##*_}" # match as much as possible
report.txt

掌握這些擴展是值得的。還有更多,包括(有點古怪)正則表達式支持、子字元串以及設置預設值或獲取可變長度的方法。男人 bash,當然。

引用自:https://serverfault.com/questions/64810