この構成では、ファイルまたはディレクトリの名前のみをエコーする必要があります。
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
次に、スペースなしでファイルとディレクトリのみを出力します。ファイルまたはディレクトリに「パーソナルドメイン」のようなスペースがある場合は、「パーソナル」という単語のみになります。
とても簡単な解決策が必要です。多分awkより良い解決策があります。
あなたは 本当にls
の出力を解析すべきではありません 。これが宿題であり、あなたが義務付けられている場合、あなたの教授は彼らが何について話しているのか知りません。次のようなことをしてみませんか。
find ./ -printf "%f\n"
または
for n in *; do printf '%s\n' "$n"; done
本当に_ls
を使用したい場合は、次のようにすることで、もう少し堅牢にすることができます。
ls -lA | awk -F':[0-9]* ' '/:/{print $2}'
あなたがinsistを間違って危険な方法で実行し、while
ループを使用しなければならない場合は、次のようにします。
ls -Al | while IFS= read -r string; do echo "$string" |
awk -F':[0-9]* ' '/:/{print $2}'; done
真剣に、しかししないでください。
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です。
なぜ誰もこの簡単なコマンドに言及しなかったのかしら。
ls -a | sort
ls
の出力は解析できません。ls -l
は言うまでもありません。改行は、スペースがファイル名の文字と同じように有効であるためです。また、... foo -> bar
のような出力を持つシンボリックリンクを考慮する必要があります。
ファイル名だけが必要なのに、なぜ-l
を使用するのですか?
ただやる:
for file in *; do
...
done
シェルに応じて、ドットファイル(.
および..
を除く)を含める場合:
zsh
:
for file in *(ND); do
...
done
bash
:
shopt -s nullglob dotglob
for file in *; do
...
done
ksh93
:
FIGNORE='@(.|..)'
for file in ~(N)*; do
...
done
POSIXly:
for file in .[!.]* ..?* *; do
[ -e "$file" ] || [ -L "$file" ] || continue
...
done
(bash
、zsh
、ksh93
構文):
find . -type f -print0 | while IFS= read -r -d '' filename; do
...
done
これは再帰的に行われ、通常のファイルにのみリストされます(つまり、dirsやsymlinks/fifos/devices ...ではありません)。
以下も参照してください。
ls
? UNIX SEでls -Al | tr -s ' ' | cut -f9- -d' '
trを使用して複数のスペースを単一のスペースに圧縮し、次にカットを使用してフィールドで分割できます
どうですか:
for file in * .[!.]*
do
printf "%s\n" "$file"
done
おそらく、ディレクトリ内のすべてのファイル名を印刷する最も簡単な方法は次のとおりです。
echo *
欠点-隠しファイルを印刷しません。