shell命令学习:递归拷贝指定目录及子目录下的某一类型文件

命令
find
sed
paste
为什么要实现这一功能?

为了拷贝某一工程下的所有CMakeLists.txt,方便分析学习该工程的整个构建方式,以及学习整个工程的源码组织方式。

脚本
# clone directory recursively and its CMakeLists.txt files
# copy directory
find . -type d | sed 's/./mkdir -p ..\/clone_dir_arch/' | sh
#tree ../clone_dir_arch

# copy CMakeLists.txt
#copyfiles=`find -name "CMakeLists.txt" | sed 's/./cp ./' `
find -name "CMakeLists.txt" | sed 's/./cp ./' > cpy.txt
echo "...copyfiles"
cat cpy.txt

#distfiles=`find -name "CMakeLists.txt" | sed 's/./..\/clone_dir_arch/' `
find -name "CMakeLists.txt" | sed 's/./..\/clone_dir_arch/' > dst.txt
 
echo "...distfiles"
cat dst.txt

echo "...merging"
paste -d " "  cpy.txt dst.txt | cat | sh

效果:

clone_dir_arch/
├── examples
│   ├── ace
│   │   ├── logging
│   │   │   └── CMakeLists.txt
│   │   └── ttcp
│   │       └── CMakeLists.txt
│   ├── asio
│   │   ├── chat
│   │   │   └── CMakeLists.txt
│   │   └── tutorial
│   │       ├── CMakeLists.txt
│   │       ├── timer2
│   │       ├── timer3
│   │       ├── timer4
│   │       ├── timer5
│   │       └── timer6
│   ├── cdns
│   │   └── CMakeLists.txt
│   ├── CMakeLists.txt
│   ├── curl
│   │   └── CMakeLists.txt
│   ├── fastcgi
│   │   └── CMakeLists.txt
│   ├── filetransfer
│   │   ├── CMakeLists.txt
│   │   └── loadtest
│   ├── hub
│   │   └── CMakeLists.txt
│   ├── idleconnection
│   │   └── CMakeLists.txt
│   ├── maxconnection
│   │   └── CMakeLists.txt
│   ├── memcached
│   │   ├── client
│   │   │   └── CMakeLists.txt
│   │   └── server
│   │       └── CMakeLists.txt
│   ├── multiplexer
│   │   ├── CMakeLists.txt
│   │   └── harness
│   │       └── src
│   │           └── com
│   │               └── chenshuo
│   │                   └── muduo
│   │                       └── example
│   │                           └── multiplexer
│   │                               └── testcase
│   ├── netty
│   │   ├── discard
│   │   │   └── CMakeLists.txt
│   │   ├── echo
│   │   │   └── CMakeLists.txt
│   │   └── uptime
│   │       └── CMakeLists.txt
│   ├── pingpong
│   │   └── CMakeLists.txt
│   ├── procmon
│   │   └── CMakeLists.txt
│   ├── protobuf
│   │   ├── CMakeLists.txt
│   │   ├── codec
│   │   │   └── CMakeLists.txt
│   │   ├── resolver
│   │   │   └── CMakeLists.txt
│   │   ├── rpc
│   │   │   └── CMakeLists.txt
│   │   ├── rpcbalancer
│   │   │   └── CMakeLists.txt
│   │   └── rpcbench
│   │       └── CMakeLists.txt
│   ├── roundtrip
│   │   └── CMakeLists.txt
│   ├── shorturl
│   │   └── CMakeLists.txt
│   ├── simple
│   │   ├── allinone
│   │   ├── chargen
│   │   ├── chargenclient
│   │   ├── CMakeLists.txt
│   │   ├── daytime
│   │   ├── discard
│   │   ├── echo
│   │   ├── time
│   │   └── timeclient
│   ├── socks4a
│   │   └── CMakeLists.txt
│   ├── sudoku
│   │   └── CMakeLists.txt
│   ├── twisted
│   │   └── finger
│   │       └── CMakeLists.txt
│   ├── wordcount
│   │   └── CMakeLists.txt
│   └── zeromq
│       └── CMakeLists.txt
└── muduo
    ├── base
    │   ├── CMakeLists.txt
    │   ├── output
    │   └── tests
    │       └── CMakeLists.txt
    └── net
        ├── CMakeLists.txt
        ├── http
        │   ├── CMakeLists.txt
        │   └── tests
        ├── inspect
        │   ├── CMakeLists.txt
        │   └── tests
        ├── output
        ├── poller
        ├── protobuf
        │   └── CMakeLists.txt
        ├── protorpc
        │   └── CMakeLists.txt
        └── tests
            └── CMakeLists.txt

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • CMake学习 本篇分享一下有关CMake的一些学习心得以及相关使用。 本文目录如下: [1、CMake介绍] [...
    AlphaGL阅读 14,204评论 11 79
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,631评论 25 709
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 10,258评论 0 11
  • 都是这样的年轻人啊 “ 像我们这种一分钟几千万上下的人,老板,年终奖能发3000么。 ” 今晚加班出了年终奖方案了...
    报_apple阅读 3,555评论 0 0
  • 今天晨读分享的书是《元认知》,元认知是一种反思自己思考的能力。同样解决一件事,为什么有些人就是比较快?这个就是元认...
    有个欧宝阅读 1,664评论 0 0