したがって、これはうまくいきます。
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
答え2
はがきの答えは、次のように元のコマンドの接頭辞と接尾辞を一重引用符で囲むことです。
ssh -o StrictHostKeyChecking=no "servername" 'find /dir/ -type f -printf "%p|%TY-%Tm-%Td|%TH:%TM|%s|%u|%U\n" > /dir/output.txt'