Unix
Shell命令刪除文件副檔名
我有一個包含自動生成的文件的目錄,這些文件都以 .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,當然。