私が最もよく理解する簡単なスクリプトがありますが、私が理解していないのは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
- 処置:-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/ \;
- でファイルの検索を開始します
$HOME
。 - 一致するファイルが見つかった場合は、
$HOME/$dir_name
その下に移動しません(サブディレクトリを「切り捨て」)。 - そうでない場合(
-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
-o
ORを意味するので、-path <some_path>
OR-name *$file_suffix
-exec
コマンドの実行を示します。
cp {} $HOME/$dir_name/
一致するファイルをコピーしてください。$HOME/$dir_name/
\;
終了-exec
コマンドを示します。