Programming

在shell腳本中提取不帶副檔名的文件名

  • October 24, 2015

可能重複:

從字元串中刪除文件副檔名的最佳方法?

如何通過刪除副檔名重命名多個文件?

我有一大堆 .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

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