unix命令用于复制具有已修改目录结构的所有.h文件

时间:2013-12-06 05:17:00

标签: bash shell bsd

假设我有一个文件夹结构,如:

库\

  • UIToolkit \
    • 文件\
      • toolkit.h
      • toolkit.c
      • toolkit.resource
  • NetworkLayer \
    • 文件\
      • network.h
      • 网络info.txt

...

我需要一个命令,以便我可以输入Libraries文件夹并在Output文件夹中指定一个Output文件夹:

输出\

  • UIToolkit \
    • toolkit.h
  • NetworkLayer \
    • network.h

基本上它:

  1. 复制所有.h文件并保留文件夹结构
  2. 还将所有标题移动到其子库的根文件夹,无论它们在子库子文件夹中有多深。
  3. 我使用的是rsync,但它没有做第二步,所以我想我需要一些快速而肮脏的修改?

    非常感谢!

2 个答案:

答案 0 :(得分:1)

你可以说:

cd /path/to/Libraries
while read -r file; do
  odir=$(cut -d'/' -f2 <<< ${file});
  fname=$(basename ${file});
  cp "$file" "/path/to/Output/${odir}/${fname}";
done < <(find . -type f -name "*.h")

这会根据所需的目录结构将所有*.h文件复制到Output文件夹。

答案 1 :(得分:1)

基于devnull的修改后的答案:

idir=$1
odir=$2

while read -r f; do
    subdir=${f#$idir}
    subdir=${subdir%%/*}
    mkdir -p $odir/$subdir
    cp -a $f $odir/$subdir
done < <(find $idir -type f -name "*.h")

调用类似

的内容
./thisscript.sh Libraries Output

应能够使用绝对或相对目录,恕我直言;但是如果.h文件在Libraries下面,则不会处理(必须至少有一个子目录级别。)。