ls -Alでファイル名(スペースを含む)のみを出力する方法は?

ls -Alでファイル名(スペースを含む)のみを出力する方法は?

次の構造のファイルまたはディレクトリ名のみをエコーする必要があります。

ls -Al | while read string
do
...
done

ls -Al出力:

drwxr-xr-x  12 s162103  studs         12 march 28 12:49 personal domain
drwxr-xr-x   2 s162103  studs          3 march 28 22:32 public_html
drwxr-xr-x   7 s162103  studs          8 march 28 13:59 WebApplication1

たとえば、次のことを試した場合:

ls -Al | while read string
do
echo "$string" | awk '{print $9}
done

これにより、空白のないファイルとディレクトリのみが出力されます。ファイルやディレクトリに「Personal Domain」などのスペースがある場合は、「Personal」という単語のみが表示されます。

非常に簡単な解決策が必要です。たぶんawkよりも良い解決策があるかもしれません。

答え1

あなた出力は実際に解析してはいけません。ls。これが宿題であり、あなたにこれをするように頼むなら、あなたの教授は彼らが何を言っているのかわかりません。次のようなことをしてみてはいかがでしょうか?

いいですね…

find ./  -printf "%f\n"

または

for n in *; do printf '%s\n' "$n"; done

...悪い...

もしあなたなら本当にを使用するには、ls次のようにしてより強力にすることができます。

ls -lA | awk -F':[0-9]* ' '/:/{print $2}'

...そして醜いもの

もしあなたなら〜にこだわるこれを誤って危険な方法で実行してループのみを使用する必要がある場合は、次の手順をwhile実行します。

ls -Al | while IFS= read -r string; do echo "$string" | 
    awk -F':[0-9]* ' '/:/{print $2}'; done

しかし、真剣に、そうしないでください。

答え2

ls -A1*が機能しない理由はありますか?

たとえば、

$ touch file1 file2 file\ with\ spaces
$ ls -Al
total 0
-rw-r--r-- 1 bahamat bahamat 0 Mar 30 22:31 file1
-rw-r--r-- 1 bahamat bahamat 0 Mar 30 22:31 file2
-rw-r--r-- 1 bahamat bahamat 0 Mar 30 22:31 file with spaces
$ ls -A1
file1
file2
file with spaces
$

*注:大文字Aと数字1。

答え3

なぜ誰もこの簡単なコマンドに言及していないのだろうか。

ls -a | sort

答え4

あなたはそれを使用することができます:

ls -lA | awk '{print $9}' 

名前にスペースが含まれているファイルがない場合は機能します。そうしないと、少し複雑なアプローチが可能になる可能性があります。

ls -lA | awk '{$1=$2=$3=$4=$5=$6=$7=$8=""; print $0;}

関連情報