2017-05-03 71 views
1

我想从具有特定字符串的文件夹中递归复制文件夹名称和特定类型。按指定文件夹和扩展名递归复制

./test/one/Print\{space} 100/ /* note: there is a space between Print an the number */ 
./test/one/Print\{space} 200/ 
./test/one/Internet\{space} 100/ 
./test/two/Print\{space} 100/ 
./test/two/Print\{space} 200/ 
./test/two/Internet\{space} 100/ 

./destinationfolder 

现在我想复制只有jpg扩展名和'打印'文件夹中的文件。

如何在控制台上执行此操作?

回答

1

你可以使用bash的globstar功能来实现这一目标:

cd _your_directory 
shopt -s globstar nullglob 
cp **/Print*/*.jpg ./destinationdir 

它非常适合那些在他们的名字空格的文件或目录。

从猛砸documentation

globstar

如果设置,在文件名扩展的上下文中使用的模式“**”将匹配所有文件和零个或多个目录和子目录。 如果模式后面跟有'/',则只有目录和子目录匹配。

0

当文件夹名称包含“空间”,你可以使用引号,以便它可以作为一个名称空间的智慧来处理..

从“打印200”目录复制.jpg文件,可以使用 CP RP “打印200”/ .JPG destinationfolder/

1

可以夫妇GNU find一些bash操作达到你正在尝试做的,

find . -type d -name "Print*" -exec sh -c 'x=$1; cp -v "$x"/*.jpg ./destinationfolder/' sh {} \; 

应该为你做诡计。这个想法是使用glob模式Print*获取包含Print的文件夹的名称和运行shell -exec从文件夹名称x做文件的副本扩展*.jpg(此处双引号的"$x"将防止事情变得GET难看,如果名字包含空格)并将其移动到目标文件夹。

相关问题