bash - 复制和更改文件名

时间:2016-01-02 00:04:56

标签: linux bash shell unix

我需要复制

中的所有文件
  

/ DIRA / [NAME] .20151231.txt

  

/ DIRB / 20151231。[NAME]的.txt

  

/ DIRC / 20151231 / [NAME]的.txt

即。我需要复制文件,但更改名称。

你可以假设我知道" date"之前的字符串,所以我们可以假设20151231是一个提供的参数。

如果我有一个名单,我可以做类似的事情

for n in $names; do; cp /dirA/$n.$date.txt /dirB/$date.$n.txt; done;

但是,如果我没有名单,怎么办?我正在寻找一个优雅的解决方案,因为从dirA中提取它们听起来有点麻烦。

谢谢!

2 个答案:

答案 0 :(得分:0)

处理此材料的合理可靠方法是:

date=20151231
cd /dirA || exit 1
mkdir -p "/dirC/$date" || exit 1
for file in *."$date.txt"
do
    name="${file%.$date.txt}"
    cp "$file" "/dirB/$date.$name.txt"
    cp "$file" "/dirC/$date/$name.txt"
done

检查cd操作;如果它失败了,继续没有意义。同样,mkdir -p操作可确保/dirC下的日期目录存在或退出。相关的错误消息已由cdmkdir生成。

使用shell globbing生成文件名是最好的;它避免了如果文件名包含空格(或换行符或其他意外字符)会发生什么问题' 作业将提取“[NAME]'文件名的一部分。然后,将其用于将文件从/dirA复制到/dirB/dirC下的相关位置。如果您认为有必要,检查/dirB/dirC是否也存在是可行的。

答案 1 :(得分:0)

也许我在提问时很可怕。我正在寻找的是" sed用于文件名"。我找到了答案 - 那是rename