次の構造のファイルまたはディレクトリ名のみをエコーする必要があります。
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
しかし、真剣に、そうしないでください。