ls /home/user/new/*.txt
は、そのディレクトリ内のすべてのtxtファイルを印刷します。ただし、次のように出力を印刷します。
[me@comp]$ ls /home/user/new/*.txt
/home/user/new/file1.txt /home/user/new/file2.txt /home/user/new/file3.txt
等々。
/home/user/new/
ディレクトリからではなくls
コマンドを実行するため、完全なディレクトリ名を指定する必要がありますが、出力は次のようにしたいだけです。
[me@comp]$ ls /home/user/new/*.txt
file1.txt file2.txt file3.txt
パス全体は必要ありません。ファイル名のみが必要です。この問題はlsコマンドを使用して解決する必要があります。その出力は別のプログラム用であるためです。
ls whateveryouwant | xargs -n 1 basename
それはあなたのために働きますか?
それ以外の場合は、(cd /the/directory && ls)
(はい、括弧が意図されています)
Xargsとallの必要はありません。lsで十分です。
ls -1 *.txt
行ごとに表示します
これを実現する方法はいくつかあります。次のようなものになります。
for filepath in /path/to/dir/*
do
filename=$(basename $file)
... whatever you want to do with the file here
done
(cd dir ; ls)
dirのファイル名のみを出力します。 1行に1つずつ必要な場合は、ls -1
を使用します。
それを解決するための派手な方法は、「rev」と「cut」を2回使用することです。
find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev
コマンドラインにsedスクリプトを追加できます。
ls /home/user/new/*.txt | sed -r 's/^.+\///'
私はすでにfgeによって回答されているベース名を好みます。別の方法は次のとおりです。
ls /home/user/new/*.txt|awk -F"/" '{print $NF}'
もう1つのい方法は:
ls /home/user/new/*.txt| Perl -pe 's/\//\n/g'|tail -1
古い問題がときどき再発するように思えるので、誰かに役立つことを望んでいます。
私の問題は、特定のディレクトリ内の「* .txt」ファイルのすべての名前を、パスなしでDatastage 7.5シーケンスの拡張子なしでテキストファイルにリストすることでした。
使用したソリューションは次のとおりです。
ls /home/user/new/*.txt | xargs -n 1 basename | cut -d '.' -f1 > name_list.txt
私たちがそれを行う方法はたくさんありますが、単にあなたがフォローを試みることができます。
ls /home/user/new | tr '\n' '\n' | grep .txt
別の方法:
cd /home/user/new && ls *.txt
ファイル名にスペース、引用符、その他の奇妙な文字が含まれていたため、選択した答えは私には機能しませんでした。 basename
の入力を引用するには、次を使用する必要があります。
ls /path/to/my/directory | xargs -n1 -I{} basename "{}"
これは、ファイルの名前に関係なく機能することが保証されています。