我希望从文件夹中递归复制,并在文件夹名称和特定类型中包含特定字符串。
./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扩展名的文件和那些位于“Print”文件夹中的文件。
如何在控制台上执行此操作?
答案 0 :(得分:2)
您可以使用Bash的globstar
功能来实现此目的:
cd _your_directory
shopt -s globstar nullglob
cp **/Print*/*.jpg ./destinationdir
适用于名称中包含空格的文件或目录。
来自Bash documentation:
globstar
如果设置,文件名扩展上下文中使用的模式“**”将匹配所有文件以及零个或多个目录和子目录。 如果模式后跟'/',则只有目录和子目录匹配。
答案 1 :(得分: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
来复制扩展名为*.jpg
的文件。文件夹名称x
(此处引用"$x"
的双引号可以防止如果名称包含空格而变得丑陋)并将其移至目标文件夹。
答案 2 :(得分:0)
当文件夹名称包含“空格”时,您可以使用引号,以便可以将其视为带空格的名称..
要从“print 200”目录中复制 .jpg文件,可以使用 cp -Rp“print 200”/ .jpg destinationfolder /