Linux-写一个shell脚本,提取一个文件夹中所有的main.cpp文件并重命名

发布于 2016-12-21 06:11:24 字数 579 浏览 1137 评论 3

小弟最近学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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

虐人心 2017-06-18 21:30:23

find . -name "*.cpp" |xargs sed ..
然后使用sed就可以了.

瑾兮 2017-03-10 09:23:44

我给一个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

浮生未歇 2017-01-30 10:01:18

写一个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' );
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文