というディレクトリがありますuploads
。これには、複数のファイルとファイルを含むいくつかのサブディレクトリが含まれています。
次の手順を1つの手順で実行する方法はありますか?
ルートアップロードディレクトリにあるファイルのみを一覧表示します。サブフォルダ名やその内容を見たくありません。
そして
次に始まるファイルをリストしないでください。
t_
私は-d
その旗を理解していますが、私が望むものを手に入れることはできません。
答え1
これは職業のように聞こえますねfind
。
-maxdepth
サブフォルダ内で再帰的に検索するのではなく、現在のディレクトリのみを返すために使用されます。-type f
ディレクトリやデバイスノードやその他のエントリではないファイルのみを返すために使用されます。-not
-name
不要な名前のファイルを避けるには、ifと組み合わせを使用してください。
次のように組み合わせることができます。
find /path/to/uploads -maxdepth 1 -type f -not -name 't_*'
答え2
GNU ls(つまり、組み込まれていないLinuxシステムとCygwinのlsコマンドと他の一部のunicesでも利用可能)には、名前に基づいて特定のファイルを隠すオプションがあります。ただし、ディレクトリを無視する方法はありません。
ls --hide='t_*' uploads
もう一つの方法は、シェルが一致するようにすることです。 Bash、ksh、およびzshには、!(t_*)
一致するファイルを除くすべてのファイルと一致するネガティブパターンがありますt*
。 bashではこの機能を有効にしshopt -s extglob
、zshではこの機能を有効にする必要がありますsetopt ksh_glob
。 Zshには、^t_*
使用する必要がある同等の構文もありますsetopt extended_glob
。これはまだディレクトリを無視しません。 Zshには、名前だけでなくメタデータなどに基づいてファイルを一致させる追加機能があります。グローバル予選。(.)
通常のファイルに制限するには、一致が終わったら追加してください。否定は^
名前一致構文の一部であるため、^t_*(.)
「一般ファイルと一致しないすべてのファイル」t_*
ではなく、「一致しないすべての一般ファイルt_*
」を意味します。
setopt extended_glob # put this in your ~/.zshrc
ls uploads/^t_*(.)
高度なツールがない場合は、実行できますfind
。CalebはGNU findを使ってこれを行う方法を示しました。。このオプションは移植可能ではありません。移植可能に再帰を停止するために-maxdepth
使用できます。-prune
find
find uploads/* -type d -prune -o \! -type f -name 't_*' -print
-print
ファイルで-exec ls -lG -- {} +
必要なオプションを実行するには、に置き換えます。ls
上記のすべてのコマンドは、ドットファイル(名前で始まるファイルなど.
)を隠します。これを表示するには、に渡すか、-A
zsh()にls
glob修飾子を追加してください。を使用すると、別の方法を使用して1つのレベルのみを再帰的に作成できます(ドットファイルを特に処理しません)。これは、現在ディレクトリで実行されている場合にのみ完全に機能します。D
ls uploads/^t_*(.D)
find
find
find
cd uploads && find . -name . -o -type d -prune -o \! -type f -name 't_*' -print
答え3
ls -l /folder | grep ^- | awk '{print $9}'
答え4
私は次のような短い方法を見つけました。
ls -p uploads | grep -Ev '/'
または
ls -pIt_* uploads | grep -v /