Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Bash Shell脚本,用于将文件从一个位置复制到另一个位置并重命名。将当前日期添加到每个文件中_Bash_Shell_Unix - Fatal编程技术网

Bash Shell脚本,用于将文件从一个位置复制到另一个位置并重命名。将当前日期添加到每个文件中

Bash Shell脚本,用于将文件从一个位置复制到另一个位置并重命名。将当前日期添加到每个文件中,bash,shell,unix,Bash,Shell,Unix,我的服务器中有一个文件夹,其中包含一些文件。这些都是自动化的,这意味着我们每天都会自动获取新文件,从而覆盖旧文件。 所以我想备份一下这些数据。 如何在复制时使用当前日期重命名这些文件,从而将所有这些文件复制到另一个文件夹中 我有一个名为folder1的文件夹,其中包含4个文件。此文件夹的路径为home/webapps/project1/folder1 aaa.csv bbb.csv ccc.csv ddd.csv 现在我想将这四个文件复制到另一个名为folder2的文件夹中。 此文件夹的路径为h

我的服务器中有一个文件夹,其中包含一些文件。这些都是自动化的,这意味着我们每天都会自动获取新文件,从而覆盖旧文件。 所以我想备份一下这些数据。 如何在复制时使用当前日期重命名这些文件,从而将所有这些文件复制到另一个文件夹中

我有一个名为folder1的文件夹,其中包含4个文件。此文件夹的路径为home/webapps/project1/folder1

  • aaa.csv
  • bbb.csv
  • ccc.csv
  • ddd.csv
  • 现在我想将这四个文件复制到另一个名为folder2的文件夹中。 此文件夹的路径为home/webapps/project1/folder2。 复制这些文件时,我想重命名每个文件,并将当前日期添加到文件中。 所以我在folder2中的文件名应该是

  • aaa091012.csv
  • bbb091012.csv
  • ccc091012.csv
  • ddd091012.csv

  • 我想为此编写一个shell脚本。请给我一些与此相关的想法或示例脚本。

    您可以使用如下脚本。您只需要更改日期选项以匹配所需的格式

    #!/bin/bash
    
    for i in `ls -l /directroy`
    do
    cp $i /newDirectory/$i.`date +%m%d%Y`
    done
    

    bash
    中,如果文件名没有空格:

    cd /home/webapps/project1/folder1
    for f in *.csv
    do 
       cp -v "$f" /home/webapps/project1/folder2/"${f%.csv}"$(date +%m%d%y).csv
    done
    

    有一种适当的方法可以拆分文件名和扩展名:

    您可以这样应用它:

    date=$(date +"%m%d%y")
    for FILE in folder1/*.csv
    do
        bname=$(basename "$FILE")
        extension="${bname##*.}"
        filenamewoext="${bname%.*}"
        newfilename="${filenamewoext}${date}.${extension}
        cp folder1/${FILE} folder2/${newfilename}
    done
    
    说明:

    • --存档
      确保以相同的所有权和权限复制文件
    • foo{bar,baz}
      扩展为
      foobar-foobaz
    • rename
      是一个常用的程序,可以精确地进行这种替换

    PS:。

    您可以使用此步骤非常有用:

    for i in `ls -l folder1 | grep -v total | awk '{print $ ( ? )}'`
    do
       cd folder1
       cp $i folder2/$i.`date +%m%d%Y`
    done
    

    $i.
    date+%m%d%Y
    这个文件是否创建为aaa.091012.csv格式…我不希望在我的文件名中有任何“点”…名称应该是namedate.csv(aaa0910112.csv)…?我有一种感觉,我被否决了,因为有人错误地将我的ls命令理解为小写的L,它是第一。这将在一行中输出每个文件。您可能希望将文件“移动”到新目录中,而不是“复制”。否则,下次运行脚本时,您将复制文件,即使这些文件没有更改。根据提供的答案,使用
    mv
    命令代替
    cp
    。如果两个目录位于不同的文件系统上(意味着您不能使用
    mv
    ),请添加
    rm
    命令以在复制后删除源文件。如果您确实需要使用
    cp
    ,我会添加
    -p
    选项以保留原始时间戳。@ran,对于linux服务器,下面的答案也会起作用???嗨..我想将这些文件添加到列表中并在该列表中循环…我如何做…对于
    /home/webapps/project1/folder1/*.csv中的f也可以。无需将
    cd
    刻录到目录中。
    cp --archive home/webapps/project1/folder1/{aaa,bbb,ccc,ddd}.csv home/webapps/project1/folder2
    rename 's/\.csv$/'$(date +%m%d%Y).csv'/' home/webapps/project1/folder2/{aaa,bbb,ccc,ddd}.csv
    
    for i in `ls -l folder1 | grep -v total | awk '{print $ ( ? )}'`
    do
       cd folder1
       cp $i folder2/$i.`date +%m%d%Y`
    done