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


24

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

ls -d * > filelist

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

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


2
ls -d *ここで、隠しファイル/フォルダーを除く現在のフォルダー内のファイルとフォルダーのみを一覧表示して混乱しています。
GM-Script-Writer-62850

はい。ただし、そのディレクトリ内のフォルダを一覧表示したくない、そのディレクトリ内のファイルのみを一覧表示したい
janet

回答:


22

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

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ベースのソリューションは、ディレクトリ以外のすべてを取得します。名前付きパイプなどが含まれます(おそらくこれが必要です)。特にfilesのみが必要な場合は、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またはより一般的なUnixおよびLinux Stack Exchangeサイトに質問を送ることをお勧めします。


1
隠しファイルを含めるかどうかに基づいて、これらのソリューションが正しいことを確認してください。
ケビンウィーラー

10

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

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フラグは正規表現のマッチング用です。


7

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

ls -al | grep ^-

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

ls -al | grep ^[-l]

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

Debian / Ubuntu

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

run-parts --list --regex . .

絶対パスの場合:

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

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

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

5

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

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

私にぴったりls -alR |grep -E '^-'
ここ

4

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

find . -type f -maxdepth 1 | sed s,^./,,

2
-maxdepth 1フィルターの前に来る必要がsedあり、-printfオプションを使用せずにこの結果を得ることができます、すなわち:(find . -maxdepth 1 -type f -printf '%f\n'これは追加のプログラムを使用するよりも効率的です)。
evilsoup

3
ls -1 --file-type | grep -v '/' | sed s/@$// > filelist

別の可能なオプションは

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

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


ご回答ありがとうございます。残念ながら、それは私のために働いていません、おそらく私はそれを間違って実行しています。私が与えた正確なコマンドを使用すると、次のエラーが表示されます:ls:illegal option--usage:ls [-ABCFGHLPRSTWabcdefghiklmnopqrstuwx1] [file ...] --file-typeと組み合わせて使用​​します。明確にすることができれば感謝します!
ジャネット

コマンドは私のために動作します(13.04を実行)、どのバージョンのubuntuを使用していますか?; -1あなたがそれを必要としないgrepに関係ありません; あなたは隠されたファイルは使用を含んする場合-aにオプションをls
-62850 GM-スクリプトライター

実際、私はMacで作業しています。おそらく、Mac OS XとUNIXではコマンドが少し異なりますか?
ジャネット

1
また、試すことができますls -F | grep -v '/' | sed s/[@*]$// > filelist
-Dr.Tower
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.