【发布时间】:2021-08-27 02:51:43
【问题描述】:
我想使用 SSH 在远程位置运行 perl 命令
#!/bin/ksh -x
ssh $RFTPUSERID@$RFTPSERVER /bin/bash >> ${LOGFILE} << EOF
cd ${ARCHIVEPATH}
find ${ARCHIVEPATH} -type f -mtime +${ARCHIVERETENTIONDAYS} -name "${WLDCRD}*" -exec rm -rf {} \;
ls ${ARCHIVEPATH} | grep -v gz$ | perl -lne '$date=`date '+%Y%m%d_%H%M%S'`; chomp($date); `mv ${ARCHIVEPATH}$_ $_$date`;'
find ${ARCHIVEPATH} -type f ! -name "*.gz" -exec gzip {} \;
exit
EOF
第一个命令可以删除旧文件,第三个命令也可以压缩文件,但是使用 perl 功能将日期附加到文件名的第二个命令不起作用。
【问题讨论】:
-
你做了什么调试?前任。 perl 在用户的 PATH 中吗?您是否打印了 perl 收到的参数?您的
ls ... | grep是否返回您期望的内容?你的...| grep -v gz$可能会导致问题,$对外壳来说意味着什么。需要双引号和反斜杠。 -
@Nic3500 : 我认为 gz$ 虽然风格肯定不好,但在这里是无害的。因为
$后面有一个空格,所以shell 不会解释它。例如echo $。 -
@SharadR.Telkar:另外,不工作并不是对问题的非常有意义的描述。请参阅here 学习,如何在Stack Overflow 上提出明智的问题。
-
@Nic3500:A,你是对的。对不起。这是一个 Perl 表达式(
-e标志)。你对不匹配的报价也是正确的。 OP 尝试将单引号嵌套在单引号内。难怪它不起作用.... -
您可以
xargs或重新格式化您的代码而不使用 perl,因为您似乎只是在重命名带有额外日期的文件...