したがって、これはうまくいきます。
find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n" > /dir/output.txt
しかし、そうではありません:
ssh -o StrictHostKeyChecking=no "servername" find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n" > /dir/output.txt
sshコマンドを実行すると、次のエラーが発生します。
bash: %TY-%Tm-%Td: command not found
bash: %TH:%TM: command not found
bash: %s: command not found
bash: %u: command not found
bash: %Un: command not found
このコマンドの形式を再指定するために欠落している特定の項目はありますか?
ベストアンサー1
このコマンドの形式を再指定するために欠落している特定の項目はありますか?
はい。 SSH経由でコマンドを実行すると、1レベルの参照が失われます。だからこれ:
find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n"
になる:
find /dir/ -type f -printf %p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n
これは一緒にパイプで接続される一連の|
シェルコマンドです()。内容全体を一重引用符で囲むことでこの問題を解決できます。
ssh -o StrictHostKeyChecking=no "servername" 'find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n"' > /dir/output.txt
あるいは、bashにstdinとしてスクリプトを渡します。
ssh -o StrictHostKeyChecking=no "servername" bash <<EOF > /dir/output.txt
find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n"
EOF