如果希望对多个目录下的多个文件进行复制,并自动重命名不覆盖已有的文件,可以使用一个循环来实现。具体的命令如下所示:
for file in dir1/* dir2/*; do
if [ -f "$file" ]; then
cp "$file" target_directory/"$(basename "$file" .txt)_$(date +%Y%m%d%H%M%S)".txt
fi
done
这个命令中,dir1/*
和 dir2/*
指定需要进行复制的目录和通配符,可以根据实际情况修改。for
循环会遍历所有满足通配符条件的文件。
if [ -f "$file" ]; then
判断当前遍历到的文件是否为普通文件,如果是普通文件则执行复制操作,否则跳过当前文件。cp "$file" target_directory/"$(basename "$file" .txt)_$(date +%Y%m%d%H%M%S)".txt
将当前遍历到的文件复制到目标目录中,并在文件名后面添加时间戳来确保文件名的唯一性。
需要注意的是,这个命令中的时间戳格式和之前给出的命令略有不同,这里使用的格式为年月日时分秒,无需添加可识别的后缀。 如果文件名中本身就包括了点号和扩展名,则需要使用 basename
函数获取文件名并去除扩展名,然后在文件名中添加时间戳后再加上 .txt
扩展名,以确保新的文件名不覆盖原有的扩展名。