2015-01-26 109 views
0

我編寫了下面這段代碼來打印輸出中目錄的文件名。該目錄是dir1並且其文件名是L1, L2, L3, ..,L512如何在shell中輸出文件名?

#!/bin/bash 
TOP=`pwd` 
for file in "$TOP/dir1"/*; do 
echo "$file" 
done 
exit 

但是,而不是印刷只是文件名(L1,L2,..),它輸出對應於每個文件的全路徑。我怎麼能改變它只接收輸出的文件名?

+0

'的文件 「$ PWD/DIR1 /」 *'會比使用'TOP'更有效。一般來說,捕獲'pwd'的輸出比使用'$ PWD'更加昂貴; 'pwd'是內建的,就像'$ PWD'一樣,但是執行命令替換需要'fork()'調用的開銷。對於這個問題,'top = $ PWD'也可以提高效率。 (按照慣例,全部大寫的名字保留用於環境變量和內置函數;在這種情況下,'TOP'既不是)。 – 2015-01-27 00:02:46

+0

@CharlesDuffy:我想知道爲什麼用你的答案的文件名不排序輸出? L1 L10 L100 L101 L102 L103 L104 L105 L106 L107 L108 L109 L11 L110 L111 等 – KianStar 2015-01-27 00:37:38

+0

他們是* *排序:因爲他們出現了。這是您的語言環境的排序順序(如果您的語言環境設置爲「C」,則爲ASCII排序),而不是數字排序順序。那裏沒有具體的答案。無論如何,您都會從globs獲取語言環境排序順序。 – 2015-01-27 01:21:39

回答

1

使用basename命令:

for file in "$TOP/dir1"/*; do 
basename "$file" 
done 
+1

這裏basename是過度/不必要的;更有效地使用參數擴展(這是內置的,而不是調用外部可執行文件):'echo「$ {file ## * /}' – 2015-01-27 00:00:21

相關問題