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