「検索」で現在のディレクトリが返されないようにする方法


11

私は現在find、指定されたディレクトリで、特定のパターンに一致するすべてのファイルとフォルダ構造を(そしてコピーして)しようとしています。

具体的には、指定したパスから「_」文字で始まらないすべてのフォルダを再帰的にコピーしたいと思います。

find /source/path/with/directories -maxdepth 1 -type d ! -name _\* -exec cp -R {} /destination/path \;

/ source / path / with / directories /には、「_」などで始まるマシン固有のディレクトリがあり、他のコピーのみに関心があります。私を超えた理由で、findコマンドは/ source / path / with / directories /ディレクトリを返し、そのため、 '_'で始まるディレクトリを含めて、そのコンテンツをコピーします。

それがなぜであるかについて誰かがヒントを持っていますか?

おかげで、

パスカル


回答:


14

find基準に一致するため、ルートパスを返します。つまり、これはディレクトリであり、で始まっていません_

あなたが探している-mindepth 1、私は疑います:

$ cd /tmp
$ mkdir a
$ touch a/b
$ mkdir a/c
$ touch a/c/d
$ find a
a
a/b
a/c
a/c/d
$ find a -mindepth 1
a/b
a/c
a/c/d

参照:マンページを見つける


優秀な!思い通りに動作します。追加して動作させました!-name 'files'が間違っているように感じました...
Pinpin

0

から変更する:

find /source/path/with/directories ...

に:

(shopt -s dotglob; find /source/path/with/directories/* ... )

その方法/source/path/with/directoriesは含まれません。

これshopt -s dotglob*.(非表示のファイル、ディレクトリ)で始まるファイルとディレクトリにも一致するようにするためです。

そして、全体がサブシェルにラップされて、サブシェル内のみ(...)の効果が制限されshoptます。そうでなければ、後でそれを元に戻す必要がありますshopt -u dotglob


で始まるディレクトリエントリでは失敗します.。も試さないでください。そうしないと.*、意図していない他のすべてのものと一致します。;-)
zigg

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