ワンステップでファイルをコピーし、ターゲットファイルの権限を変更するには?

ワンステップでファイルをコピーし、ターゲットファイルの権限を変更するには?

私は本質的に繰り返される複雑なタスクを実行するためにシェルスクリプトを書いています。問題の説明を簡単にするために、複雑なタスクの最後のステップは、特定のパス(一部の複雑なステップに基づいて見つかったもの)から事前定義されたターゲットパスにファイルをコピーすることです。コピーされたファイルの権限は600です。 644に変えたいです。

単一のコマンドでシステムにファイルをコピーし、権限を変更するように指示するオプションを探しています。それはまるで- cp -<some_flag> 644 <source_path> <destination_path>

2段階のプロセスでファイルがコピーされたら、ファイルの権限を変更できると言うこともできます。しかし、問題があります。その理由は、ソースパスが他のコマンドの出力として得られるからです。したがって、chmod名前で呼び出すスクリプトを作成するために、ファイル名だけでなくファイルの絶対パスも取得します。

私のコマンドの最後の段落は次のとおりです。 ...| xargs -I {} cp {} /my/destination/path/

chmodそのため、コピー後に呼び出されるファイル名がわかりません。

答え1

chmod通話に次の内容を含めますxargs

...|  xargs sh -c 'for file; do 
                      cp -- "$file" /my/destination/path/ && 
                        chmod 700 /my/destination/path/"$file"; 
                    done' sh

バラよりhttps://unix.stackexchange.com/a/156010/22222使用される特定の形式に関する追加情報。

ローカルディレクトリにファイル名ではなくフルパスを入力する場合は、次のようにファイル名のみを取得する必要がありxargsます。${file##*/}

...|  xargs sh -c 'for file; do 
                  cp -- "$file" /my/destination/path/ && 
                    chmod 700 /my/destination/path/"${file##*/}"; 
                done' sh

関連情報