ファイル名の一部に基づいて現在のフォルダとサブフォルダのファイルを検索することがよくあります。この場合、find + grep
ただfind
。例えば
find . | grep user #19 chars typed
find でのみ作成できます。
find . -path "user*" #21 chars typed
ファイルを見つけるために設計されたコマンドを使用するとき、より多くの文字を入力し、それらの2つを組み合わせて使用するのは少し愚かな感じです。
文字入力時にfindだけをより効率的にする方法はありますか?
答え1
はい、
ff () {
find . -path "*$1*"
}
関数は次のように呼び出されます。
ff user
そして、与えられた文字列を含む現在のディレクトリ内または下のすべてのパス名(ファイル、ディレクトリなど)を返します。
~/.bashrc
関数定義はファイル(またはシェルで使用されている対応するシェル初期化ファイル)に入る必要があり、次に開始する対話型シェルで使用できます。
次のバリエーションは、パス名のファイル名部分のみを考慮します。
ff () {
find . -name "*$1*"
}
結果を次に制限する場合一般ファイルをクリックしてから通話-type f
に追加します。find
ff () {
find . -type f -name "*$1*"
}
コマンドに注意してください。
find . -path "user*"
何も出力されません。これは、考慮されるすべてのパス名がで始まるためです.
。
最後の警告:私はこれがインタラクティブに使用されると仮定しています。目到着バラより結果から。これをスクリプトで使用したり、関数から返されたファイル名に対して反復を実行したい場合検索結果を繰り返すのはなぜ悪い習慣ですか?」。
答え2
結局、これらのファイルで何かをしたいと仮定すると、シェル補完システムにリストを表示し、そのファイルの項目を選択するように指示できます。
たとえば、次のようになりますzsh
。
$echo**/*ユーザー*Tab 完全な拡張 [4/ユーザー] 1/2/3/ユーザー すべての拡張を完了 1/2/3/ユーザー4/ユーザー オリジナルを完成 **/*ユーザー*
次に、矢印キーを使用Alt+Aして選択したいファイル(または埋め込みファイル)を選択します(上記のように反転画像として表示されます[...]
)。Ctrl+D完成の選択を開始せずに完成のリストを参照してください。
これには、~/.zshrc
少なくとも以下が含まれます。
zstyle ':completion:*' completer _expand _complete
zstyle ':completion:*' menu select=0
zstyle ':completion:*' verbose true
zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' group-name ''
autoload -Uz compinit
compinit
compinstall
仕上げの好みを調整するために実行することをお勧めします。
上記で**/*user*
返されたファイル名前埋め込みuser
(隠しファイルと隠しディレクトリのファイルを除いて、(D)
再度必要に応じてglob修飾子を追加してください)。ファイル用道含めるuser
、(**/*~^*user*
必要に応じて)に変更します。set -o extendedglob
~/.zshrc
これはソートされたリストを提供する利点もあります ls --colour
。/
@
eval "$(dircolors ~/.dircolors)"
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
あなたのための~/.zshrc
。
また、完成した出力はfind
人が消費するように意図されているため、改行やその他の印刷できない文字を含むファイル名に関する問題を回避できます。
zsh
有効な文字を形成しないバイトシーケンスを含むファイル名の問題(少なくともGNUの場合)もありませんfind
(たとえば、UTF-8ロケールではディレクトリにファイルが見つかりません)。find
find -path '*user*'
user
$'St\xe9phane'
答え3
find
パスが定義されていない場合、GNUバージョンはデフォルトで現在のディレクトリに設定されます。
find -name "user*" # 18 chars typed plus enter.
答え4
ご使用の場合、一度、pip install grin
grin
コマンドとユーティリティを入手できますgrind
。(現在はPython 2しかないようです。)
grindを使用すると、クエリは次のようになります。
grind user*
11文字です。
もちろん、Pythonメソッドを使用している場合は、最も頻繁に実行される検索を実行するようにカスタマイズされたflocというファイルを常にパスに配置できます。
#!/usr/bin/env python3
from glob import glob
import sys
for arg in sys.argv[1:]:
print('\n'.join(glob('**/{}*'.format(arg), recursive=True)))
その後、chmod +x floc
実行可能にします。その後、あなたのクエリは次のようになります。
floc user
最大9文字。もちろん、元のコマンドのシェルエイリアスを作成して、同様の削減を得ることもできます。