Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 复制最新的两个文件并附加日期_Linux_Bash - Fatal编程技术网

Linux 复制最新的两个文件并附加日期

Linux 复制最新的两个文件并附加日期,linux,bash,Linux,Bash,我正在寻找一种方法,将目录a中的最新.gz文件复制到目录B,并将日期附加到该文件中 例如: 目录A 电影院 radio.gz cars.txt camera.gz 目录B 电影院.gz.20200310 radio.gz.20200310 使用以下命令,我可以将最新的.gz文件复制到dirb cp$(ls-1t/dira*gz|head-2)“dirb” 但是,我没有找到一种方法来更改将日期附加到文件名 我试着这样做: cp$(ls-1t/dira*gz | head-2)“dirb/*

我正在寻找一种方法,将
目录a
中的最新
.gz
文件复制到
目录B
,并将日期附加到该文件中

例如:

目录A

  • 电影院
  • radio.gz
  • cars.txt
  • camera.gz
目录B

  • 电影院.gz.20200310
  • radio.gz.20200310
使用以下命令,我可以将最新的
.gz
文件复制到
dirb

cp$(ls-1t/dira*gz|head-2)“dirb”

但是,我没有找到一种方法来更改将日期附加到文件名

我试着这样做:

cp$(ls-1t/dira*gz | head-2)“dirb/*.$(date+%F\ur)”

但根本不起作用


请提供您的帮助:)

您无法将此压缩为一个cp命令。但是你可以这样做

for f in $(ls -1t/dira gz | head -2); do
    cp "$f" "dirb/$f.$(date +%F_%R | sed 's;/;\\/;g')"
done

编辑:我通过sed传递日期以转义日期字符串中的“/”字符(否则cp将把它们解释为目录名)。

您不能将其压缩到一个cp命令中。但是你可以这样做

for f in $(ls -1t/dira gz | head -2); do
    cp "$f" "dirb/$f.$(date +%F_%R | sed 's;/;\\/;g')"
done

编辑:我通过sed传递日期,以转义日期字符串中的“/”字符(否则cp将把它们解释为目录名)。

从dira和dirb的父目录中尝试以下代码

ls -1t dira/*.gz | head -2 | while read -r line; do cp $line dirb/${line#*/}.$(date +%F_%R); done

我使用while循环文件,并修剪目录名。如果您有任何疑问,请告诉我

从dira和dirb的父目录中尝试下面的代码

ls -1t dira/*.gz | head -2 | while read -r line; do cp $line dirb/${line#*/}.$(date +%F_%R); done
for TO_MOVE in `ls -t *.gz | head -n2`; do 
    cp $TO_MOVE dirb/;
    mv dirb/$TO_MOVE dirb/$TO_MOVE.`date +%Y%m%d`;
done

我使用while循环文件,并修剪目录名。如果您有任何疑问,请告诉我

我的想法是一次获取一个名称,将其存储在变量中,将日期附加到变量,然后使用变量进行复制。我不知道如何实现它,但似乎它可能比同时实现两者都简单。我的想法是一次获取一个名称,将其存储在变量中,将日期附加到变量,然后使用变量进行复制。我不知道如何实现它,但似乎这可能比同时实现两者都要容易。虽然这段代码可以回答这个问题,但提供关于为什么和/或这段代码如何回答这个问题的附加上下文可以提高其长期价值。我认为你完全错了@Igor F。问题在于具体的任务,而不是某个命令的特定功能。正如你所说,没有“长期价值”。此外,代码块非常简单(cp和mv的基本用法)。我认为在这类问题上,没有什么要说的,也没有什么要解释的来显示代码。如果是这样的话,那么问题(及其答案)就不应该在堆栈溢出上。既然OP已经得到了答案,他们现在的目的是什么?但是,如果将来的其他用户也能从答案中受益,那么解释肯定会有帮助。这个问题太具体了,将来对其他人没有用处,因为它涉及个人在特定任务中的实际需要,而不是命令或其他命令的功能。然后,很抱歉,看看其他答案,您是否发现注释为代码添加了有用的内容?虽然此代码可能会回答此问题,但提供有关此代码为什么和/或如何回答此问题的附加上下文会提高其长期价值。我认为您完全错了@Igor F。问题在于具体的任务,而不是某个命令的特定功能。正如你所说,没有“长期价值”。此外,代码块非常简单(cp和mv的基本用法)。我认为在这类问题上,没有什么要说的,也没有什么要解释的来显示代码。如果是这样的话,那么问题(及其答案)就不应该在堆栈溢出上。既然OP已经得到了答案,他们现在的目的是什么?但是,如果将来的其他用户也能从答案中受益,那么解释肯定会有帮助。这个问题太具体了,将来对其他人没有用处,因为它涉及个人在特定任务中的实际需要,而不是命令或其他命令的功能。然后,对不起,看看其他答案,您是否发现注释为代码添加了有用的内容?
for TO_MOVE in `ls -t *.gz | head -n2`; do 
    cp $TO_MOVE dirb/;
    mv dirb/$TO_MOVE dirb/$TO_MOVE.`date +%Y%m%d`;
done