次の構造のファイルまたはディレクトリ名のみをエコーする必要があります。
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;}