假设我有两个文件夹(存储在我的主目录中)dir1
和dir2
两个文件夹都包含一个名称相同的文件,比如hello_world.txt
。但是,每个hello_world.txt
文件的内容不同。
我能做到
ls dir*/hello_world.txt
dir1/hello_world.txt dir2/hello_world.txt
将列出这两个文件。太棒了!但...
如何制作两个文件的副本,使用*
外卡, 和在同一时间重新命名它们时间。即我希望输出
hello_world1.txt hello_world2.txt
并将其放在我的主目录中。
答案 0 :(得分:2)
for循环确实是最好的解决方案:它清晰,可维护,尽管是多线的,但非常简单:
i=0
for hw in dir*/hello_world.txt; do
dest="$HOME/${hw##*/}"
cp "$hw" "${dest%.*}$((++i)).txt"
done
输入:
$ tree
.
├── dir1
│ └── hello_world.txt
└── dir2
└── hello_world.txt
输出:
$ tree
.
├── dir1
│ ├── hello_world.txt
└── dir2
└── hello_world.txt
$ (cd ~ && tree)
.
├── hello_world1.txt
└── hello_world2.txt
答案 1 :(得分:0)
GNU Coreutils有一个-b
到cp
的选项,可以避免覆盖文件。
cp -b numbered dir*/hello_world.txt $HOME
但是,这并不能完全控制生成的名称。
有关详细文档,请参阅Coreutils文档中的info coreutils cp
和Backup options。