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

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

おすすめ記事