shell脚本从一个位置复制到另一个位置,并重新命名当前的日期添加到每个文件(Shell scrip

2019-07-31 11:47发布

我在我的服务器的文件夹里面包含一些文件。 这些自动化的,这意味着我们每天都自动获得新的文件,这将覆盖旧的。 因此,要采取备份该数据。 我如何能够将这些文件复制到一个另一个文件夹重命名这些文件与当前的日期,而复制。

例如:我有一个文件夹命名文件夹1其中包含4个文件。 该文件夹的路径是家庭/ webapps /目录PROJECT1 /文件夹1

  1. aaa.csv
  2. bbb.csv
  3. ccc.csv
  4. ddd.csv

现在我想所有这四个文件拷贝到一个名为文件夹2不同的文件夹。 该文件夹的路径是家庭/ webapps /目录PROJECT1 /资料夹。 而复制这些文件,我要重命名的每个文件和当前日期添加到文件中。 所以在文件夹2我的文件名应该是..

  1. aaa091012.csv
  2. bbb091012.csv
  3. ccc091012.csv
  4. ddd091012.csv

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

Answer 1:

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


Answer 2:

你可以使用脚本像下面。 你只需要更改日期选项,以符合你想要的格式。

#!/bin/bash

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


Answer 3:

path_src=./folder1
path_dst=./folder2
date=$(date +"%m%d%y")
for file_src in $path_src/*; do
  file_dst="$path_dst/$(basename $file_src | \
    sed "s/^\(.*\)\.\(.*\)/\1$date.\2/")"
  echo mv "$file_src" "$file_dst"
done


Answer 4:

有分裂的文件名和扩展名的正确方法: 在猛砸提取文件名和扩展名

您可以将它像这样:

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


Answer 5:

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

说明:

  • --archive确保文件具有相同的所有权和权限复制。
  • foo{bar,baz}展开成foobar foobaz
  • rename是一个常用的程序做的正是这种替代。

PS: 不使用ls此 。



Answer 6:

您可以使用这一步是非常有用的:

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


文章来源: Shell script to copy files from one location to another location and rename add the current date to every file
标签: bash shell unix