2011-12-15 5 views
35

ls /home/user/new/*.txtは、そのディレクトリ内のすべてのtxtファイルを出力します。しかし、次のように出力を表示します。ディレクトリ全体のパスを含まないファイル名のみを表示する

[[email protected]]$ ls /home/user/new/*.txt 
/home/user/new/file1.txt /home/user/new/file2.txt /home/user/new/file3.txt 

など。

私はパス全体を望んでいない私は、完全なディレクトリ名を与える必要があり、まだ私は出力のみ

[[email protected]]$ ls /home/user/new/*.txt 
file1.txt file2.txt file3.txt 

ようになりたいので、ない/home/user/new/ディレクトリからlsのコマンドを実行したい

。ファイル名のみが必要です。この問題は、lsコマンドを使用して解決する必要があります。その出力は別のプログラム用です。

+0

どのようなOSですか?たとえば、OS Xはあなたがすでに望むものを実行します。あなたはエイリアスされていないと確信していますか? –

答えて

60

ls whateveryouwant | xargs -n 1 basename

あなたのための仕事をしていますか?

そうしないと、(cd /the/directory && ls)(はい、括弧が意図)

+0

はい、うまくいきました。どうもありがとうございました。 – Ashish

+2

'' whateveryouwant'が複数のディレクトリを参照する場合には 'ls -d'を使うべきでしょう。 –

+3

パスに空白が含まれていると、xargsが破損することに注意してください。代わりに 'xargs -d '\ n' -n 1'を使う必要があります。 – Zitrax

7

あなたがこれを達成することができますいくつかの方法がありますすることができます。あなたはコマンドラインにsedスクリプトを追加することができ

for filepath in /path/to/dir/* 
do 
    filename=$(basename $file) 

    ... whatever you want to do with the file here 
done 
4

ls /home/user/new/*.txt | sed -r 's/^.+\///' 
1

私はすでにFGEによって回答されたベース名を好む一つは、ようなものになるだろう。 もう一つの方法は次のとおりです。

ls /home/user/new/*.txt|awk -F"/" '{print $NF}' 

1より醜いな方法は次のとおりです。

ls /home/user/new/*.txt| perl -pe 's/\//\n/g'|tail -1 
4

空想の方法は、それが二回 "REV" を使用することですし、 "カット" 解決するために:

find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev 
29

Xargsとすべての必要はありません、私は十分です。

ls -1 *.txt 

表示行賢明

+8

OPを慎重に読んだ場合、これは正しくありません。これは、そのディレクトリにいる場合にのみ機能します。 –

+0

完璧に動作します!ありがとう@VRVigneshwara! 'ls -1 bin /' bin /ディレクトリ内のエントリをLinux Debian上のパスなしでリストします。 –

0

はちょうど昔の問題は今、もう一度戻ってくると、すべての私はいつもここで良いヒントを見つけるように見えるように誰かに役立つことを期待して。

私の問題は、「* .txt」ファイルのすべての名前をパスなしでDatastage 7.5シーケンスの拡張子を持たない特定のディレクトリにリストすることでした。

私たちが使用した溶液は次のとおりです。

ls /home/user/new/*.txt | xargs -n 1 basename | cut -d '.' -f1 > name_list.txt 
2

(cd dir ; ls)

ますでのみ出力ファイル名ディレクトリ。 1行につきたい場合はls -1を使用してください。

関連する問題