在Bash

时间:2017-04-09 16:55:06

标签: bash

目录结构如下。

├── input
│   ├── config.ac
│   ├── dir1
│   │   ├── image2.png
│   │   └── image3.jpg
│   ├── dir2
│   └── image1.png
├── main.sh
└── output

基本上,我正在尝试运行以下./main.sh输入输出,我想生成以下内容:

├── input
│   ├── config.ac
│   ├── dir1
│   │   ├── image2.png
│   │   └── image3.jpg
│   ├── dir2
│   └── image1.png
├── main.sh
└── output
    ├── dir1
    │   └── image2.png
    ├── dir2
    └── image1.png

在尝试了一些像find -exec这样的东西之后,我逐步完成了它。我试图将输入的内部目录结构复制到输出中,同时只复制.png文件而不是其他任何内容。 这是我尝试过的:

for DIR in $1/; do
       mkdir $2/$DIR
       cp $1/$DIR*.png $1/$DIR $2/$DIR
done

这是我的逻辑,for循环将遍历源目录($ 1)中的每个目录结构,然后它将在目标目录($ 2)中创建完全相同的目录。现在,它在其所在的当前目录中查找任何.png文件,并将其复制到刚刚在目标中创建的完全相同的相应目录。 注意,我计划稍后在for循环中对文件进行一些转换

这似乎根本不起作用。我收到以下错误:

cp: cannot stat 'input/input/*.png': No such file or directory
cp: cannot stat 'input/input/': No such file or directory

3 个答案:

答案 0 :(得分:2)

更改到您要复制的目录

然后

tar cf - .| ( cd /other directory; tar xf -)

答案 1 :(得分:0)

您可能对Z = 0 + A * B * C' = A * B * C' = A AND B AND (NOT C)

感到满意
rsync

这应该复制所有目录和png文件。如果您想查看要复制的内容,请添加rsync -a --include '*/' --include '*.png' --exclude '*' input/ output 选项。

(请参阅-nv个版本here上的说明。)

答案 2 :(得分:0)

我喜欢复制目录树(使用输入/输出结构):

cd input
find . | cpio -pdm ../output

调整'发现'根据需要选择。