unix 将文件从一个位置复制到另一个位置并将当前日期添加到每个文件名的Shell脚本

68de4m5k  于 2023-05-06  发布在  Unix
关注(0)|答案(6)|浏览(178)

我的服务器上有一个文件夹,里面有一些文件。这些都是自动化的,这意味着每天我们都会自动获得新文件,这些文件将覆盖旧文件。所以我想备份一下这些数据。我怎样才能复制到另一个文件夹中的所有这些文件重命名的文件与当前日期,而复制。
例如:我有home/webapps/project1/folder1文件夹,其中包含4个文件:

  1. aaa.csv
  2. bbb.csv
  3. ccc.csv
  4. ddd.csv
    现在,我想将这四个文件复制到不同的位置,如home/webapps/project1/folder2
    在复制这些文件时,我想重命名每个文件并将当前日期添加到文件中。所以我在folder2中的文件名应该是:
  5. aaa091012.csv
  6. bbb091012.csv
  7. ccc091012.csv
  8. ddd091012.csv
    我想为此编写一个shell脚本。请给予我一些想法或与此相关的一些示例脚本。
hgb9j2n6

hgb9j2n61#

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
pu82cl6c

pu82cl6c2#

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

#!/bin/bash

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

xlpyo6sf3#

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
ijxebb2r

ijxebb2r4#

有一个正确的方法来分割文件名和扩展名:Extract filename and extension in Bash
你可以这样应用它:

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
wfypjpf4

wfypjpf45#

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:don't use ls for this

nkhmeac6

nkhmeac66#

你可以使用这个步骤是非常有用的:

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

相关问题