Linux-写一个shell脚本,提取一个文件夹中所有的main.cpp文件并重命名
小弟最近学Linux。。并且现在切身实际的发现 有需要shell的地方了。
这样,我以前的windows系统里做ACM 题 之前一直用的是VS 每次做一道题都要新建一个空称 然后用OJ题号和题目名称加上题目分类命名。比如POJ3368 Frequent values(频繁出现的数字 rmq问题) 。。
大家都知道。。vs的一个工程要占好几MB 其实都没用。我就只想留下那些源代码而已。。
现在想清理。大目录是ACM 这个目录下 有大量目录 每个目录对应一道题的工程。
我想要的结果是 把每个工程的main.cpp文件命名为这个工程的名字 全部复制到另一个文件夹。
这样我就能把原来那些占大量空间的ACM删掉了。。
我思路是这样的。
进入到ACM文件夹 对于其中的每个文件夹。先保存这个文件夹的名字。
然后进入到这个文件夹下 和他的子目录下 搜寻 *.cpp 找到以后。改名为 保存的那个名字
复制到另一个文件夹 比如/home/gl/code
最后检查下/home/gl/code里面 是不是已经有了原来ACM文件夹下的所有源代码。。
我对linux了解不多。。shell也不太会写。。
求shell高手帮忙。。感激不尽
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
find . -name "*.cpp" |xargs sed ..
然后使用sed就可以了.
我给一个shell的吧, 易懂
#! /bin/sh
SRC_ROOT=/home/gl/ACM
STORE_ROOT=/home/gl/code
for file in $(find $SRC_ROOT -type f -name main.cpp); do
PRO_ROOT=$(dirname $file)
PRO_NAME=$(basename $PRO_ROOT)
cp $file $SOTRE_ROOT/$PRO_NAME.cpp
done
ps:缩成一条命令是这样子的
for file in $(find /home/gl/ACM -type f -name main.cpp); do cp $file /home/gl/code/$(basename $(dirname $file)).cpp; done
写一个perl的吧, 反正linux里perl基本也是标配.
use strict;
use warnings;
use v5.14;
use File::Find;
find(&wanted, '/home/gl/ACM');
sub wanted {
next unless -f and /main.cpp/;
my ($file_prefix)=($File::Find::dir =~ /([^/]+)/?$/);
copy($File::Find::name, '/home/gl/code/'. $file_prefix. '.cpp' );
}