![Bashでは、空の中括弧はどういう意味ですか? [コピー]](https://linux33.com/image/150458/Bash%E3%81%A7%E3%81%AF%E3%80%81%E7%A9%BA%E3%81%AE%E4%B8%AD%E6%8B%AC%E5%BC%A7%E3%81%AF%E3%81%A9%E3%81%86%E3%81%84%E3%81%86%E6%84%8F%E5%91%B3%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
私はこれらすべてを理解していますが、始まる7行目に達するとそれを失いますfind
。私は理解できません-exec cp {}
。私はこれがexecuting
コマンドであることを理解していますが、括弧が何をしているのかcopy
わかりません。特に括弧が空の場合はさらにそうです。{}
この内容は、私が読んでいる本から抜粋したものです。
# This script prompts to backup files and location
# The files will search on $HOME dir and will only backup files to same $HOME dir.
read -p "Which file types would you like to backup? >>: " file_suffix
read -p "Which directory would you like to backup to? >>: " dir_name
# creates a directory if it does not currently exist
test -d $HOME/$dir_name || mkdir -m 700 $HOME/$dir_name
# search criteria ie .sh . The -path, -prune and -o options are to exclude the back directory from the backup.
find $HOME -path $HOME/$dir_name -prune -o -name "*$file_suffix" -exec cp {} $HOME/$dir_name/ \;
exit 0
答え1
{}
特別な意味はありませんが、bash
何か意味がありますfind
。
find . -exec stat {} ";"
現在の作業ディレクトリからアクセスできる各ファイルは、ファイルごとに1回の呼び出しで繰り返し計算されますstat
。
find . -exec stat {} "+"
stat
複数のファイルが同時に実行されます。
{}
これを引用するか、変数を使用して実際にシェル構文の一部ではないことを自分で確信できます。
find . -exec stat "{}" ";"
A="{}" find . -exec stat "$A" ";"
最初の例と同じ出力が生成されます。
答え2
文字列{}がユーティリティ名または引数に表示されると、現在のファイルのパス名(「find」で検索されます)に置き換えられます。したがって、あなたの例では、{findfound}は$ HOME / $ dir_name /にコピーされます。
答え3
find
これは、次の引数として渡されたコマンドの結果を表しますexec
。
find
コマンドの結果が次のと仮定すると、x
次のようになります。
find ..... -exec echo "{}"
x
このパラメータに渡され、パラメータがx
と表示されるため、出力が提供されます{}
。
あなたの場合、findはその属性を持つファイルを提供し、これらのファイルは-path $HOME/$dir_name -prune -o -name "*$file_suffix"
コマンドとして表示されます(すべてではなく1つずつ)。cp
{}