web-dev-qa-db-ja.com

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

次に、スペースなしでファイルとディレクトリのみを出力します。ファイルまたはディレクトリに「パーソナルドメイン」のようなスペースがある場合は、「パーソナル」という単語のみになります。

とても簡単な解決策が必要です。多分awkより良い解決策があります。

93
Alex Zern

あなたは 本当に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

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

110
terdon

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です。

87
bahamat

なぜ誰もこの簡単なコマンドに言及しなかったのかしら。

ls -a | sort
50
Ben

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
5

bashzshksh93構文):

find . -type f -print0 | while IFS= read -r -d '' filename; do
  ...
done

これは再帰的に行われ、通常のファイルにのみリストされます(つまり、dirsやsymlinks/fifos/devices ...ではありません)。

以下も参照してください。

2
kenorb
ls -Al | tr -s ' ' | cut -f9- -d' '

trを使用して複数のスペースを単一のスペースに圧縮し、次にカットを使用してフィールドで分割できます

2
simpleuser

どうですか:

for file in * .[!.]*
do
  printf "%s\n" "$file"
done
1
Scrutinizer

ls -1enter image description here それは整数1

マニュアルページから。

     ls -1     list one file per line.  Avoid '\n' with -q or -b
0
abdul rashid

おそらく、ディレクトリ内のすべてのファイル名を印刷する最も簡単な方法は次のとおりです。

echo *

欠点-隠しファイルを印刷しません。

0
Grzegorz