Programming
在shell腳本中提取不帶副檔名的文件名
可能重複:
我有一大堆 .txt 文件,我想載入到數據庫中。
這些表與 .txt 文件具有相同的名稱,但沒有副檔名。
所以我想執行命令
for f in *.txt; do mysql -u root -p -e "LOAD DATA LOCAL INFILE '$f' INTO TABLE $f" -D rn4; done
但是,最後一個
$f
讓我很頭疼,因為我希望它只使用名稱,而不是副檔名。所以對於文件
piRNA.txt
,命令看起來像mysql -u root -p -e "LOAD DATA LOCAL INFILE 'piRNA.txt' INTO TABLE piRNA" -D rn4
我該怎麼做呢?
為了使答案對其他人有用,請不要只給我命令,而是請寫一兩行關於如何在一般情況下提取名稱的資訊。
您可以在 shell 腳本中這樣做:
f=piRNA.txt g=${f%.txt}
執行
echo $f $g
產生以下輸出:
piRNA.txt piRNA
使用該
%
語法,您可以刪除匹配的後綴模式。範例中的後綴模式是.txt
並且f
是從中刪除它的變數。請注意,模式也可能包含萬用字元(參見例如bash 手冊了解詳細資訊)。與往常一樣,如果您的文件名可能包含空格,您必須將變數的引用放在雙引號中(例如
"$f"
等)。
嘗試這個:
for f in *.txt; do echo ${f%.*};done
- 使用模式匹配
*.txt
來匹配所有以結尾的文件.txt
${f%.*}
是Parameter Expansion的 shell 語法,去掉$f
. 這裡我們去掉擴展部分.txt
。