同じディレクトリにあるサブディレクトリをリストせずに、ディレクトリ内のすべてのファイルのリストを作成し、そのリストを新しいファイルに出力したい。
ls -d * > filelist
現在のディレクトリにあるすべてのファイルのリストを作成しますが、現在のディレクトリにあるサブディレクトリもリストします。 -maxdepth 1
オプションを使用してfind
コマンドを試しましたが、findはファイル名とともにパスも出力するため、出力形式に問題があります。
サブディレクトリまたはその内容の名前ではなく、ディレクトリ内のファイルのみの出力リストを生成する別のコマンドまたはオプションを使用できる場合は、教えてください。
検索ベースのソリューション:
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サイト。
ファイル名のみをリスト:
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フラグは正規表現のマッチング用です。
通常のファイルのみをリストするには:
ls -al | grep ^-
シンボリックリンクが含まれる場合:
ls -al | grep ^[-l]
リストの最初の文字がファイルの種類を説明しているので、-
は、それが通常のファイルであることを意味します。シンボリックリンクはl
です。
一致するすべてのファイルの名前(リンクを含む)を印刷します。
run-parts --list --regex . .
絶対パスの場合:
run-parts --list --regex . $PWD
p
で始まりd
で終わる/etc
内のすべてのファイルの名前を出力します。
run-parts --list --regex '^p.*d$' /etc
さらに別の解決策、私のために働いた素朴に短いもの:
ls -la | grep -E '^[^d]' > files
Findを使用し、必要に応じて出力からディレクトリ名を削除することをお勧めします。
find . -type f -maxdepth 1 | sed s,^./,,
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ファイルずつ。