lsコマンド出力の1列だけをエコーするにはどうすればよいですか?

lsコマンド出力の1列だけをエコーするにはどうすればよいですか?

lsコマンドを実行すると、出力は次のようになります。

file1 file2 file3 file4

出力の特定の列(この場合はfile2)のみを表示できますか?私は成功せずに次のことを試しました。

echo ls | $2

基本的に私が望むのは、2番目の列だけをエコーすることです。この場合はエコしたいです。

file2

答え1

次のコマンドは、出力形式を1lsつの列として指定します。

ls -1 /directory

答え2

最も信頼性の高い方法は、ファイルを配列に配置してから解析を防ぐために2番目のファイルをインポートすることです。

files=(*)
printf '%s\n' "${files[1]}"

ファイルの検索順序は値によって異なりますLC_COLLATE。したがって、LC_COLLATE=Cすべての特殊なケースで「標準」のソートが必要な場合は、まずそれを設定することをお勧めします。

答え3

出力が端末でない場合は、単一列モードを使用するには -Casを追加する必要があります。次に、2番目の列を印刷します。lsawk

ls -C | awk '{print $2}'

答え4

すでに述べたように、列を使用してls出力を解析するlsことは、ファイル名の長さと端末の幅に応じて行が途切れるため、あまり強力ではありません。要素リストの単一の列を表示することはしばしば楽しいです。 Cutコマンドを使用してこれを実行できます。

echo file1 file2 file3 file4 | cut -d" "  -f2

表示されます

file2

-d列区切り記号を選択できます。

cut -d, -f2

カンマ区切りリストの2番目の列を表示できます。

関連情報