Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我想将不同的文件夹&其中的一个文件(所有文件夹都相同)复制到另一个文件夹-unix_Linux_Shell_For Loop_Copy_Directory - Fatal编程技术网

Linux 我想将不同的文件夹&其中的一个文件(所有文件夹都相同)复制到另一个文件夹-unix

Linux 我想将不同的文件夹&其中的一个文件(所有文件夹都相同)复制到另一个文件夹-unix,linux,shell,for-loop,copy,directory,Linux,Shell,For Loop,Copy,Directory,假设我有多个文件夹,每个文件夹中有许多文件,但我感兴趣的文件是xyz.p: ~/home/A/xyz.p ~/home/B/xyz.p ~/home/C/xyz.p ~/home/D/xyz.p 现在,我只想将这些文件夹中的一个文件从xyz.p复制到另一个目录: ~/trial/A/xyz.p ~/trail/B/xyz.p ~/trail/C/xyz.p ~/trail/D/xyz.p 我不想从文件夹A、B、C、D复制其他文件 现在我已经尝试了很长时间使用shell脚本,但它并没有真正起作用

假设我有多个文件夹,每个文件夹中有许多文件,但我感兴趣的文件是xyz.p:

~/home/A/xyz.p

~/home/B/xyz.p

~/home/C/xyz.p

~/home/D/xyz.p

现在,我只想将这些文件夹中的一个文件从xyz.p复制到另一个目录:

~/trial/A/xyz.p

~/trail/B/xyz.p

~/trail/C/xyz.p

~/trail/D/xyz.p

我不想从文件夹A、B、C、D复制其他文件


现在我已经尝试了很长时间使用shell脚本,但它并没有真正起作用

我发现解决这个问题最简单的方法就是编写一个简单的脚本

#!/bin/bash

STARTDIR="home"
TARGETDIR="test"

FILENAME="xyz.p"

for DIR in 'A' 'B' 'C' 'D';
do
  cp -rfv $STARTDIR/$DIR/$FILENAME $TARGETDIR/$DIR/$FILENAME
done
此脚本从startdir/subdir获取文件,并将其放入targetdir/subdir目录

子目录可以用for命令行上的单引号放入列表中

rfv意味着副本将是递归的,包括所有子目录、强制的,并且详细地告诉您它在做什么

此脚本对我的输出为

$./moveit.sh
`home/A/xyz.p' -> `test/A/xyz.p'
`home/B/xyz.p' -> `test/B/xyz.p'
`home/C/xyz.p' -> `test/C/xyz.p'
`home/D/xyz.p' -> `test/D/xyz.p'
希望这是有帮助的。
在提问之前,请尝试做更多的研究:

使用GNU并行,看起来是这样的:

parallel 'mkdir -p ~/trial/{//}; cp {} ~/trial/{//}' ::: */xyz.p
GNU Parallel是一个通用的并行程序,它使得在同一台机器上或在您有ssh访问权的多台机器上并行运行作业变得非常容易。它通常可以代替for循环

如果您有32个不同的作业要在4个CPU上运行,并行化的直接方法是在每个CPU上运行8个作业:

GNU Parallel会在完成时生成一个新进程—使CPU保持活动状态,从而节省时间:

装置

如果您的发行版没有打包GNU Parallel,那么您可以进行个人安装,而不需要root访问。通过执行以下操作,可在10秒内完成:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
有关其他安装选项,请参阅

了解更多

请参阅更多示例:

观看介绍视频:

浏览本教程:

注册电子邮件列表以获得支持: