这是我为从目录传输特定类型的文件而创建的脚本。我正在努力寻找一种方法将文件移动到具有当前时间戳的存档目录。
#!/bin/bash
SERVER='abc.com'
USER='xyz'
PASSWD='lddkdkdkas'
find /directory/ -name ABC002*.csv | while read fname
do
scp $fname [email protected]:~/XYZ/
mv $fname ./archive/
done
在这里我可以将文件移动到存档,但我无法将其名称更改为文件名*时间戳。
答案1
尝试
mv $fname ./archive/$(basename $fname)-$(date +%Y%m%d-%T)
答案2
尝试:
mv $fname /tmp/`basename $fname`-`date +%Y%m%d_%H%M`
如果您喜欢不同的时间戳或文件名,则可以使用此主题的变体。请注意,此解决方案不够强大,无法处理多个文件名。
答案3
为华纳的答案添加一个基本名称:
mv $fname ./archive/`basename $fname`-`date +%Y%m%d_%H%M`
答案4
您可能需要使用basename
命令来剥离完整的文件路径。
您可能还想使用数组来生成稍后要移动的文件列表;甚至使用选项-exec
,find
例如:
find /dir -iname BLAH -exec sh -c 'new_name=$(basename {}); scp {} user@host:dest/ && mv {} /archive/$new_name$(date..)' \;
(别忘了\;
最后的)
&&
仅当 ( ) 通过 ssh 成功复制后,该行才会存档文件。
另一个提示:也许您想要tar
文件并通过网络发送压缩档案?这可能会为您节省 ssh 握手时间(并使用 ssh 密钥!不要将密码保存在您将留下的脚本中!)