タグ付けされた質問 「find」

検索に関する質問については、ディレクトリ階層内のファイルを検索するコマンドラインユーティリティ。このタグは、find自体に関する質問や、findコマンドラインユーティリティの使用から発生する問題に関する質問に使用します。


4
.gitignoreにないファイルを検索する
プロジェクト内のファイルを表示するfindコマンドがあります。 find . -type f -not -path './node_modules*' -a -not -path '*.git*' \ -a -not -path './coverage*' -a -not -path './bower_components*' \ -a -not -name '*~' .gitignoreにあるファイルを表示しないようにファイルをフィルタリングするにはどうすればよいですか? 私は私が使うと思った: while read file; do grep $file .gitignore > /dev/null && echo $file; done しかし、.gitignoreファイルはグロブパターンを持つことができます(ファイルが.gitignoreにある場合、パスでも機能しません)。グロブを持つ可能性のあるパターンに基づいてファイルをフィルタリングするにはどうすればよいですか?
11 grep  find  wildcards  git 

2
findの-pathおよび-pruneオプションについて説明する
私が理解している簡単なスクリプトがあります。はっきりしないのは、findコマンドです。私はたくさんのドキュメントを持っていますが、それはそれをより明確にするのに役立ちません。私の考えは、それがforループのように機能し、現在見つかったファイルが{}にスワップインされて$ HOME / $ dir_nameにコピーされると思いますが、-pathおよび-prune -oを使用した検索はどのように機能しますか?そのような具体的で関連性のあるドキュメントがあり、それでも何が起こっているのかわからないのは面倒です。 #!/bin/bash # The files will be search on from the user's home # directory and can only be backed up to a directory # within $HOME read -p "Which file types do you want to backup " file_suffix read -p "Which directory do you …
11 find 

5
単一のディレクトリにある多数のファイルを移動する最も効率的な方法は何ですか?
CentOS 5.x これが繰り返し質問である場合は、お詫び申し上げます。(ファイルの削除に関して)同様の質問をたくさん見ましたが、まったく同じシナリオではありません。 数十万のファイル(おそらく100万を超える)を含むディレクトリがあり、別の問題の短期的な修正として、これらのファイルを別の場所に移動する必要があります。 議論の目的で、これらのファイルが元々存在していて/home/foo/bulk/、それらをに移動したいとします/home/foo2/bulk2/ 試行するmv /home/foo/bulk/* /home/foo2/bulk2/ と、「引数が多すぎます」というエラーが表示されます。 Google氏は、ファイルを一括で削除する別の方法として、findを実行することを教えてくれました。何かのようなもの: find . -name "*.pdf" -maxdepth 1 -print0 | xargs -0 rm 何かを削除していたとしても問題ありませんが、この場合はファイルを移動したいと思います... find . -name "*" -maxdepth 1 -print0 | xargs -0 mv /home/foo2/bulk2/bashのようにタイプすると、ファイルがディレクトリではないというメッセージが表示されます。 あるディレクトリから別のディレクトリにファイルをまとめて移動するためにここで使用するのに最適なコマンドは何ですか?
11 linux  bash  shell  find  rename 

2
Linuxのfindコマンドを使用して、ファイル名ではなく内容を出力するにはどうすればよいですか?
私はこのような名前の何千ものunlファイルを持っていますcbs_cdr_vou_20180624_603_126_239457.unl。次のコマンドを使用して、これらのファイルのすべての行を印刷したいと思いました。しかし、それは私にファイル名だけを与えます。ファイル名は必要ありません。ファイルの内容が必要です。 find -type f -name 'cbs_cdr_vou_20180615*.unl' > /home/fifa/cbs/test.txt 現在の出力: ./cbs_cdr_vou_20180615_603_129_152023.unl ./cbs_cdr_vou_20180615_603_128_219001.unl ./cbs_cdr_vou_20180615_602_113_215712.unl ./cbs_cdr_vou_20180615_602_120_160466.unl ./cbs_cdr_vou_20180615_603_125_174428.unl ./cbs_cdr_vou_20180615_601_101_152369.unl ./cbs_cdr_vou_20180615_603_133_193306.unl 予想される出力: 8801865252020|200200|20180613100325|; 8801837463298|200200|20180613111209|; 8801845136955|200200|20180613133708|; 8801845205889|200200|20180613141140|; 8801837612072|200200|20180613141525|; 8801877103875|200200|20180613183008|; 8801877167964|200200|20180613191607|; 8801845437651|200200|20180613200415|; 8801845437651|200200|20180613221625|; 8801839460670|200200|20180613235936|; catコマンドの-bash: /bin/logger: Argument list too long場合find、catコマンドの代わりに使用したかったので、エラーが発生することに注意してください。
10 linux  find  cat 

2
LinuxでSunOSの `find`コマンドに代わるものはありますか?
findLinux のコマンドには、findSunOSまたはSolarisのコマンドと比較して、多くのオプションがあります。 find次のようなコマンドを使用したい: find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r Linuxマシンでは完全に正常に動作します-printfが、SunOSマシンでは同じコマンドにオプションがありません。出力を"%TY-%Tm-%Td %f\n"フォーマットでカスタマイズしたい。 SunOSの代替案を提案してください。

2
`sudo find`コマンドで、` -exec`コマンドが通常のユーザーとして実行されていることを確認するにはどうすればよいですか?
process_pathsスクリプトが昇格された特権で実行されないように、次のコマンドを機能させようとしています。これを行う方法はありますか? sudo find /path/ -exec process_paths '{}' \+ ここに/path/は、通常のユーザーに読み取り権限のないファイルがいくつかあります。スクリプトprocess_pathsにはパスが必要です。
10 find  sudo  su 

4
コマンドを見つけ、出力を列挙して選択を許可しますか?
を使用するとfind、多くの場合、次のような複数の結果が見つかります find -name pom.xml ./projectA/pom.xml ./projectB/pom.xml ./projectC/pom.xml 特定の結果のみを選択したい場合があります(例:)edit ./projectB/pom.xml。find出力を列挙し、別のアプリケーションに渡すファイルを選択する方法はありますか?お気に入り: find <print line nums?> -name pom.xml 1 ./projectA/pom.xml 2 ./projectB/pom.xml 3 ./projectC/pom.xml !! | <get 2nd entry> | xargs myEditor ? [編集]言及した解決策のいくつかを使って、いくつかの特異なバグにぶつかった。だから私は再現する手順を説明したいと思います: git clone http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.git cd eclipse.platform.swt.git <now try looking for 'pom.xml' and 'feature.xml' files> [編集]解決策1 これまでのところ「nl」(列挙型出力)の組み合わせで、ヘッドとテールを組み合わせて関数にして$(!!)を使用すると機能するようです。 つまり: find -name pom.xml …
10 bash  files  find 

5
見つける| xargs shasumがチェックサムファイル自体のチェックサムを(時期尚早に)作成し、チェック時に失敗する
私の問題(を使用したスクリプト内#!/bin/sh)は次のとおりです。アーカイブのために、ディレクトリ内のすべてのファイルをチェックサムしようとします。すべてのファイル名を含むチェックサム(私の場合はsha1)ファイルは、同じディレクトリに存在する必要があります。~/testファイルf1とf2:を含むディレクトリがあるとします。 mkdir ~/test cd ~/test echo "hello" > f1 echo "world" > f2 今チェックサムを計算します find -maxdepth 1 -type f -printf '%P\n' | xargs shasum まさに私が望むことをします、それは現在のディレクトリのすべてのファイルのみをリストし、sha1合計を計算します(maxdepthは後で変更されるかもしれません)。STDOUTの出力は次のとおりです。 f572d396fae9206628714fb2ce00f72e94f2258f f1 9591818c07e900db7e1e0bc4b884c945e6a61b24 f2 残念ながら、これをファイルに保存しようとすると find -maxdepth 1 -type f -printf '%P\n' | xargs shasum > sums.sha1 結果のファイルには、それ自体のチェックサムが表示されます。 da39a3ee5e6b4b0d3255bfef95601890afd80709 sums.sha1 f572d396fae9206628714fb2ce00f72e94f2258f f1 9591818c07e900db7e1e0bc4b884c945e6a61b24 f2 shasum …
10 find  xargs  checksum  hashsum 

3
番号で終わるファイルを検索
ログファイルがどんどん大きくなるにつれて、バックアップスクリプトを作成しようとしています。私が持っているのは、現在のファイル(たとえばのsecureファイル/var/log/)をコピーして、そのファイルからコンテンツを削除することです。しかし、そこのような名前を持ついくつかのファイルは、以下のとおりですsecure.1、secure.2と私は好きでこのすべては、それらをカウントし、その数が大きければ、その後2、それらすべてをアーカイブします。このファイルを見つけたり、カウントしたりする方法が見つかりません。最初に思いついたのは、 find /var/log/ -name *.1 | wc -l そして、これ1は1つのファイルがあるので常に印刷されますsecure.1。どのようにしてforループのように数えることができます{1..5}か?このファイルを分離して1つのファイルにし、バックアップまたは削除するか、または何をする方法はありますか...または、最初に、番号で終わるすべての番号をどのようにして見つけることができますか?

1
ファイル名に改行を含むファイルを見つける方法は?
ファイル名に改行が含まれているファイルを見つけようとしています。しかし、どのパターンを使用するべきかわかりません。 以下は機能しますが、インデントされたコードで使用する場合はあまり役に立ちません。 find . -name '* *' 私はこれら2つを試したところ、nという文字を含むファイル名を見つけることに成功しました。 find . -name '*\n*' find . -name "*\n*" それから私はバックスラッシュエスケープシーケンスを書く方法を見つけてこれを試しました: find . -name "*$'\n'*" しかし、それでは何も見つかりません。どのようにパターンを書けばよいですか?
10 shell  find  patterns 

4
findにすべてではなくほとんどのシンボリックリンクをたどるにはどうすればよいですか?
私のOSとホームディレクトリはSSDにあります。いくつかの大きなファイルをハードディスクに保存し、ホームディレクトリからハードディスクへのシンボリックリンクを作成します(たとえば、〜/ Videos / Filmsは/ mnt / hdd / Filmsへのシンボリックリンクです)。私はいくつかのWineプレフィックスも持っています。それぞれにdosdevices / z:/にシンボリックリンクがあります。 したがって、-Lを指定せずにfindを使用すると、ハードディスク上のすべてが失われます。しかし、-Lを指定してfindを使用すると、Wineの/へのシンボリックリンクが原因でループになってしまいます。 これを解決するための賢明な方法はありますか?直感的に、「dosdevicesと呼ばれるディレクトリの下にない限り、シンボリックリンクをたどる」という流れに沿って何かが必要です。「ハードディスク上の何かへのシンボリックリンクをたどる」も機能します。
10 find  symlink 


2
検索/ lsキャッシング
初めて実行したとき、findまたはlsディレクトリで実行したときのように、作業に時間がかかるようです。しかし、その後は毎回、ディレクトリのコンテンツのリストがどこかにキャッシュまたはインデックスされているかのように高速です。 コンピュータの再起動後もこのキャッシュを保持する方法はありますか?
10 find  ls  cache 

2
findコマンドからパイプされたファイル名を操作する
私はBashに比較的慣れていないため、表面上は非常に簡単に思える何かを実行しようとしています。ディレクトリ階層全体でfindを実行して、すべての* .wmaファイルを取得し、その出力をコマンドにパイプして、mp3に変換します。変換したファイルを.mp3として保存します。私の考えは、コマンドは次のようになるはずだと考えていました(オーディオ変換コマンドは省略し、代わりに説明のためにエコーを使用しています)。 $ find ./ -name '*.wma' -type f -print0 | xargs -0 -I f echo ${f%.*}.mp3 私が理解しているように、-print0引数を使用すると、スペースを含むファイル名を処理できます(これらの多くは、音楽ファイルであるので、これを行います)。次に、(xargsの結果として)findからの各ファイルパスがfにキャプチャされ、文字列の最後から部分文字列の一致/削除を使用すると、mp3で元のファイルパスをエコーする必要があることを期待していますwmaの代わりに拡張子。ただし、この結果の代わりに、次のように表示されます。 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 ... だから私の質問(特定の「ここで何が間違っているのか」を除いて)はこれです-パイプ操作の結果である値は、変数割り当ての結果である値とは異なる文字列操作操作で処理する必要があります?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.