Mac OS XまたはLinuxで、コマンドのより単純な形式はありますか
find . -name "*substring_of_filename*"
これは、現在のディレクトリ(または他の特定のディレクトリ)内でsubstring_of_filename
を含む名前を持つすべてのファイルを検索することです。これは一般的なことなので、Bashのエイリアスまたは関数を使用して、コマンドを短くして入力しやすくする方法はありますか?または、使用できる他の入力しやすいコマンドはありますか?
といった:
findfile . substring_of_filename
(注:最初に書かれた質問が使用されました app_config 例として substring_of_filename。)
Mac OS Xでは、mdfind
を使用してエイリアスを.bashrcに配置することもできます。
# mdfind uses Spotlight
alias findf='mdfind -onlyin . -name'
findf app_config
これがbash関数です。.bashrc
に入れてください。
function findfiles { find "$1" -iname "*$2*"; }
(-iname
を使用すると、検索で大文字と小文字が区別されないことに注意してください。これが不要な場合は、代わりに-name
を使用してください。)
Au contraire!さらに複雑なものもありますが、機能するものは次のとおりです。
find . -name "*app_config*"
Gnu-findにはドットは必要ありません:
find -name "*app_config*"
ただし、アスタリスクをマスクする必要があります。そうしないと、シェルによって解釈され、「app_config」に一致する現在のディレクトリ内のファイル名に一致するファイル名のみが見つかります。
これを~/.profile
または~/.bashrc
のいずれかに入れて、どちらのMacを使用しているかわからない:
findname ()
{
find . -name "*$1*"
}
次に、findname name_of_file
で関数を呼び出します
複数の単語を使用したい場合は、もっと複雑にする必要があります。私が手に負えないと考える最も簡単な方法は次のとおりです。
findname()
{
find .|grep $1|grep $2|grep $3|grep $4
}
これにより、現在のディレクトリ内のすべてのファイルが検索され、文字列1が検索され、その結果で文字列2が検索され、4になるまで検索されます。
これをbash、zsh、tcsh、shなどのスクリプトで行う代わりに、 TextExpander ショートカットを作成しました。 sh≤Space≥とTEタイプを入力します
見つける。 -iname "**"
アスタリスクの間にカーソルを置きます。
Bash 4を使用する場合(shopt -s globstar
)またはzsh:
prinftf %s\\n **/*substring_of_filename*
OS Xでは、ロケートを使用しないのはなぜですか?確かに、locatebはデフォルトではあまり頻繁に更新されませんが、簡単に変更できます(OS Xで定期的なジョブスケジュールを変更します)。 LocateはBSDismであり、Linux上にあるかどうかはわかりません。
ほとんどのLinuxディストリビューションでは、locateを使用できます。例えば:
$ locate find | grep bin
/sbin/findfs
/usr/bin/find
/usr/bin/find2Perl
/usr/bin/findsmb
/usr/bin/gst-typefind-0.10
/usr/bin/memdiskfind
/usr/bin/oldfind
/usr/bin/sane-find-scanner
/usr/include/c++/4.5/ext/pb_ds/detail/bin_search_tree_/find_fn_imps.hpp
/usr/include/c++/4.5/ext/pb_ds/detail/binary_heap_/find_fn_imps.hpp
/usr/include/c++/4.5/ext/pb_ds/detail/binomial_heap_base_/find_fn_imps.hpp
答えはいいえだ"。 "現在のディレクトリ以下の部分文字列を含むファイル名でファイルを検索する" in GNU find
。回避するために使用するエイリアスこの制限は次のとおりです(zsh
の場合)。
# find file in cwd by [S]ubstring, case [I]nsensitive, change to first sub[D]irectory
finds() { find . -name "*$**"; }
findsi() { find . -iname "*$**"; }
findsid() { cd `find . -iname "*$**" | head -n1 | xargs dirname`; }
最後は私のお気に入りです。これらは次のように使用できます。
> ls -R
.:
file1 File2 HOLEFILE test
./test:
hello
(これがテストディレクトリです)
> findsi file
./HOLEFILE
./File2
./file1
> finds file
./file1
> finds le
./File2
./file1
> findsid ell
> ls
hello