假设我有名为user/john/john1
、john2
和john3
的文件夹,每个文件夹中都有一个名为dog.txt
的文件。我想创建一个名为johns_dogs
的单独文件夹,并将每个文件夹中的所有dog.txt
复制到这个新文件夹中,但将文件重命名为john1_dog.txt
、john2_dog.txt
和john3_dog.txt
。
我该怎么做呢?我假设我可以用一个for循环来做这个,我已经试过了...我只是看起来不能把它做对;特别隔离文件夹名称以应用于使用linux终端的文件名。使用GUI不是一个选项。谢谢:)
for fname in user/john/*/dog.txt;
do
new_name=basename $(PWD)
cp user/john/*/dog.txt > $new_name.txt;
done
这就是我一直想做的...但它不起作用,我不知道为什么?
2条答案
按热度按时间bxgwgixi1#
一种选择是通过参数扩展使用bash字符串替换,为每个文件构建所需的输出路径:
或作为一行程序:
运行以上命令后
.johns_dogs
目录的内容:字符串替换详细信息:
第一个
vzgqcmou2#
在类似的情况下,我的方法不是一些完全不可理解的、靠巫术工作的、写测试调试然后扔掉的脚本,而是如下所示:
ls
命令创建一个“长”文件列表(每行一个完整的文件名)。cp
。#!bash
,执行必要的chmod
)这看起来可能需要很多工作,但实际上你可以很快完成(只要你不必手动修改每一行),它的巨大好处是你可以用眼睛检查它,并有相当高的信心,一旦运行,它会做正确的事情,而脚本可能会破坏你的文件系统,你只能在事后才知道。
我的意思是,请不要误解我的意思,我是一个软件工程师,我以写代码为生,我通过写代码来解决问题,但在某些情况下,写代码是不值得的。