web-dev-qa-db-ja.com

ディレクトリ内のサブディレクトリとその内容をリストせずにディレクトリ内のファイルをリストする

同じディレクトリにあるサブディレクトリをリストせずに、ディレクトリ内のすべてのファイルのリストを作成し、そのリストを新しいファイルに出力したい。

ls -d * > filelist

現在のディレクトリにあるすべてのファイルのリストを作成しますが、現在のディレクトリにあるサブディレクトリもリストします。 -maxdepth 1オプションを使用してfindコマンドを試しましたが、findはファイル名とともにパスも出力するため、出力形式に問題があります。

サブディレクトリまたはその内容の名前ではなく、ディレクトリ内のファイルのみの出力リストを生成する別のコマンドまたはオプションを使用できる場合は、教えてください。

24
janet

検索ベースのソリューション:

find . -maxdepth 1 -type f -printf '%f\n'

Bashベースのソリューション:

for f in *; do [[ -d "$f" ]] || echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -d "$f" ]] || ls -- "$f"; done

Bashベースのソリューションは、ディレクトリ以外のすべてを取得します。名前付きパイプなどが含まれます(おそらくこれが必要です)。特にファイルだけが必要な場合findコマンドまたは次のいずれかを使用します。

for f in *; do [[ -f "$f" ]] && echo "$f"; done
##  or, if you want coloured output:
for f in *; do [[ -f "$f" ]] && ls -- "$f"; done

これを定期的に使用する場合は、もちろんこれを~/.bashrcのどこかにあるエイリアスに入れることができます。

alias lsfiles='for f in *; do [[ -f "$f" ]] && ls -- "$f"; done'

あなたが実際にUbuntuではなくOSXを使用していることをコメントで指摘しているので、次回 Apple またはより一般的な nix&Linux スタックに質問を送ることをお勧めしますExchangeサイト。

22
evilsoup

ファイル名のみをリスト:

 1. ls -p | grep -v /(隠しファイルなし)
 2. ls -l | grep ^tr -s '' | cut -d '' -f 9(隠しファイルなし)
 
 a)ls -pa | grep -v /(隠しファイルあり)
 b)ls -la | grep ^-| tr -s '' | cut -d '' -f(隠しファイルあり)

リストディレクトリのみ:

 1. ls -p | grep /(非表示なし)
 2. ls -l | grep ^ d | tr -s '' | cut -d '' -f 9(非表示なし)
 
 a)ls -pa | grep /(非表示)
 b)ls -l | grep ^ d | tr -s '' | cut -d '' -f 9(非表示)

grep -v -e ^ $は、結果から空白行を削除します。

---(詳細

ls -pフラグはディレクトリ名の末尾に '/'を付け、-Rフラグは再帰検索用、-lは情報付きリスト、-aはすべての(隠しファイルを含む)リスト付き、grep -vフラグは結果の反転用で、-eフラグは正規表現のマッチング用です。

10
Ananda

通常のファイルのみをリストするには:

ls -al | grep ^-

シンボリックリンクが含まれる場合:

ls -al | grep ^[-l]

リストの最初の文字がファイルの種類を説明しているので、-は、それが通常のファイルであることを意味します。シンボリックリンクはlです。

Debian/Ubuntu

一致するすべてのファイルの名前(リンクを含む)を印刷します。

run-parts --list --regex . .

絶対パスの場合:

run-parts --list --regex . $PWD

pで始まりdで終わる/etc内のすべてのファイルの名前を出力します。

run-parts --list --regex '^p.*d$' /etc
7
kenorb

さらに別の解決策、私のために働いた素朴に短いもの:

ls -la | grep -E '^[^d]' > files
5
arsaKasra

Findを使用し、必要に応じて出力からディレクトリ名を削除することをお勧めします。

find . -type f -maxdepth 1 | sed s,^./,,
4
Cougar
ls -1 --file-type | grep -v '/' | sed s/@$// > filelist

別の可能なオプションは

ls -F | grep -v '/' | sed /[@*]$// > filelist

--file-typeは、フォルダーの末尾に/を置きます(ただし、シンボリックリンクの末尾に@を置きます。The grep -v '/'は、サブディレクトリーを削除します(それらが「/」で終わるため)。sed s/@$//は、@を削除します。 grep -vが正常に機能するように、1行に1ファイルずつ。

3
Dr.Tower