命令
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