findの-pathおよび-pruneオプションの説明

findの-pathおよび-pruneオプションの説明

私が最もよく理解する簡単なスクリプトがありますが、私が理解していないのはfindコマンドです。多くの文書がありますが、それほど明確ではありません。私の考えは、これがforループのように動作し、現在見つかったファイルが{}に変わり、$ HOME / $ dir_nameにコピーされることです。しかし、検索方法- 小さな道そして-トリム-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 want to backup to " dir_name

# The next lines creates the directory if it does not exist
test -d $HOME/$dir_name || mkdir -m 700 $HOME/$dir_name

# The find command will copy files that match the
# search criteria ie .sh . The -path, -prune and -o
# options are to exclude the backdirectory from the
# backup.
find $HOME -path $HOME/$dir_name -prune -o \
-name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;
exit 0

これは私がこの問題を解決できるはずであることを知っている文書です。

-パスモード

ファイル名はシェルパターンと一致します。メタ文字は処理されません。/または たとえば、.-path "./sr*sc" が見つかると、次のディレクトリのエントリが印刷されます。./src/その他(ある場合)。ディレクトリツリー全体を無視するには、ツリー内のすべてのファイルを確認する代わりに-pruneを使用します。たとえば、ディレクトリをスキップします。ソース/Emacsそして、その下のすべてのファイルとディレクトリを検索し、見つかった他のファイルの名前を印刷するには、次の手順を実行します。

find . -path ./src/emacs -prune -o -print

~からFindutils マニュアル

- 処置:-execコマンドは安全でないバリアントです。-execdirジョブは POSIX によって指定されます。主な違いは、コマンドが次のディレクトリで実行されることです。探す呼ばれる、という意味だ。{}ファイルのデフォルト名と一致するのではなく、開始ディレクトリの1つの名前で始まる相対パスに展開されます。

いくつかの実装ですが、探す変える{}引数に単独で現れる場合にのみGNU探す変える{} どこに現れても構いません。

そして

たとえば、現在のディレクトリ内または下のすべてのCヘッダーファイルを/ tmp / masterファイルと比較するには、次のようにします。

      find . -name '*.h' -execdir diff -u '{}' /tmp/master ';'

答え1

-pathとまったく同じように動作します-nameが、最後のコンポーネントの代わりにチェックされているファイルのフルパス名にパターンを適用します。

-pruneディレクトリの場合は、見つかったファイルの下に降順を無効にします。

それらを1つにまとめると、コマンドは

find $HOME -path $HOME/$dir_name -prune -o -name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;
  1. でファイルの検索を開始します$HOME
  2. 一致するファイルが見つかった場合は、$HOME/$dir_nameその下に移動しません(サブディレクトリを「切り捨て」)。
  3. そうでない場合(-o)一致するファイルが見つかった場合は、*$file_suffixそのファイルをにコピーします$HOME/$dir_name/

$HOMEアイデアは$HOME-pruneバックアップのバックアップを防ぐには、次のセクションが必要です。

答え2

これはfindコマンド(-execステートメント)の一部です。

これにより、findコマンドで見つかったファイル/ディレクトリと対話できます。

find $HOME -path $HOME/$dir_name -prune -o -name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;

find $HOME $HOME でファイル/ディレクトリ検索を示します。

学習するには、-path <some_path>以下を参照してください。「パスを検索」の説明

学習するには、-prune以下を参照してください。https://stackoverflow.com/questions/1489277/how-to-use-prune-option-of-find-in-sh

-oORを意味するので、-path <some_path>OR-name *$file_suffix

-execコマンドの実行を示します。

cp {} $HOME/$dir_name/ 一致するファイルをコピーしてください。$HOME/$dir_name/

\;終了-execコマンドを示します。

関連情報