我需要复制
中的所有文件/ 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中提取它们听起来有点麻烦。
谢谢!
答案 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
下的日期目录存在或退出。相关的错误消息已由cd
和mkdir
生成。
使用shell globbing生成文件名是最好的;它避免了如果文件名包含空格(或换行符或其他意外字符)会发生什么问题'
作业将提取“[NAME]'文件名的一部分。然后,将其用于将文件从/dirA
复制到/dirB
和/dirC
下的相关位置。如果您认为有必要,检查/dirB
和/dirC
是否也存在是可行的。
答案 1 :(得分:0)
也许我在提问时很可怕。我正在寻找的是" sed
用于文件名"。我找到了答案 - 那是rename
。