重命名过去两天的文件,文件创建时间为后缀,scp相同



我在Linux中使用的命令逻辑如下。使用"昨天"one_answers"昨天之前"获取带有创建日期的文件列表,并重命名它们并通过scp传输。文件名应该像<lt<YYYYMMDD_creation_date_of_that_filename>gt&gt_filename。

例如

  1. 获取输出

ls -lrth --time-style=+"%Y%m%d" | egrep "日期-d"1天前"+%Y%m%d'|日期-d"2天前"+%Y%m%d'" > tmp.txt

-rw-rw-rw- 1 user user 418K 20211225 log.897.gz
-rw-rw-rw- 1 user user 419K 20211225 log.898.gz
-rw-rw-rw- 1 user user 419K 20211225 log.899.gz
  1. 重命名。这将以相同文件的创建时间重命名为后缀

    for f in tmp.txt|awk '{print$7}'; do cp "$f" "$(stat -c %Y "$f" | date +%Y%m%d)_$f"; done

  2. 一次性传输所有这些文件

for i in list_of_file_from_above; do scp $i user@server.com:/target/folder;done

我陷入了困境。每次我都要输入scp的密码请帮忙。"焦油";选项也可以考虑。

您似乎有两个问题是关键的阻碍因素。

  1. 如何按日期筛选文件
  2. 如何在没有密码的情况下使用ssh

对于第一个问题,请使用find。这里有一条很好的线索,但这并不能让你到达终点。请注意,上限是独占的,因此我将其设置为当前日期而不是昨天。

find . -type f -newermt $(date +%Y%m%d --date "2 days ago") ! -newermt $(date +%Y%m%d)

对于第二个问题,您将希望使用SSH密钥。ssh-keygen的文档有很好的例子,而且很容易阅读。简而言之,您将:

  • 创建一个公钥/私钥对
  • 将公钥复制到服务器(ssh命令的目标机器(
  • 并使用-i选项在scp命令中指定私钥的位置

提示:由于您希望在自动应用程序中使用密钥,请不要输入密钥密码。如果你的密钥被泄露,这是一个风险,所以要小心。

最新更新