
私は命令を出しました:
ls -lrt
リストされているファイルとディレクトリは次のとおりです。
drwxr-xr-x 4 root root 4096 Feb 2 2014 abc
drwxr-xr-x 4 root root 4096 Feb 2 2014 cde
drwxr-xr-x 4 root root 4096 Feb 2 2014 efg
-rwxr-xr-x 4 root root 4096 Feb 2 2014 aaa.txt
ここで、 for ループまたは while ループを使用して、リストされた出力ファイルがディレクトリであるかどうかを確認します。
答え1
ではls
、以下のコマンドを使用してディレクトリのみを一覧表示します。
ls -d -- */
ls 自体を使用して通常のファイルを一覧表示するには (ファイル名に改行文字が含まれていないと仮定)、以下のコマンドを使用できます。
ls -p | grep -v /
通常のファイルのみをリストするには、GNUや他のいくつかのfind実装では、次のようにします。
find . -maxdepth 1 -type f
(前のものとは対照的に、隠しファイルも含まれており、リストはソートされていないことに注意してください)
標準的な同等のものは次のようになります。
find . ! -name . -prune -type f
答え2
ディレクトリの内容をループし、ファイルの種類に基づいてアクションを実行する方法についての「シェル スクリプト テンプレート」のようなものが必要な場合は、次のヒントが役立つかもしれません。
for f in *
do
if [[ -d "$f" ]]
then
... your processing of directories here, reference them as "$f" ...
fi
done
これは、現在のディレクトリ内のすべてのエントリを調べ、それらがディレクトリであるかどうかを確認し、それらに対して任意の処理を実行します。ディレクトリ テストの構文は BASH 固有であることに注意してください。一般的なケースでは、 を使用しますif [ -d "$f" ]
。
別の方法としては、リストをディレクトリ エントリのみに制限します。
for d in */
do
... whatever you need to do on directory "$d" ...
done
答え3
すべてのディレクトリを見つけるためにループは必要ありません。find
代わりに次のコマンドを使用できます。
find . -maxdepth 1 -type d
これにより、現在のディレクトリ内のすべてのディレクトリが一覧表示されます。ls -l
出力が必要な場合は、次のようにします。
find . -maxdepth 1 -type d | xargs ls -ld
実際にループを使用したい場合は、次の構造を使用できます。
for file in $(ls)
do
if [[ -d $file ]]
then
ls -ld $file
fi
done
ループfor
は によって返されたすべてのエントリをループしls
、if
エントリがディレクトリであるかどうかをテストします。
答え4
ディレクトリ名を一覧表示する
compgen -d
点から始めない
compgen -d -X '.*' | xargs ls -dlrt