按指定文件夹和扩展名递归复制
问题描述:
我想从具有特定字符串的文件夹中递归复制文件夹名称和特定类型。按指定文件夹和扩展名递归复制
./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扩展名和'打印'文件夹中的文件。
如何在控制台上执行此操作?
答
你可以使用bash的globstar
功能来实现这一目标:
cd _your_directory
shopt -s globstar nullglob
cp **/Print*/*.jpg ./destinationdir
它非常适合那些在他们的名字空格的文件或目录。
从猛砸documentation:
globstar
如果设置,在文件名扩展的上下文中使用的模式“**”将匹配所有文件和零个或多个目录和子目录。 如果模式后面跟有'/',则只有目录和子目录匹配。
答
当文件夹名称包含“空间”,你可以使用引号,以便它可以作为一个名称空间的智慧来处理..
从“打印200”目录复制.jpg文件,可以使用 CP RP “打印200”/ .JPG destinationfolder/
答
可以夫妇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难看,如果名字包含空格)并将其移动到目标文件夹。