查找文件列表,创建目录并在linux中复制这些文件
例如,我想从不同的目录复制“file to be copy.txt”查找文件列表,创建目录并在linux中复制这些文件,linux,cp,Linux,Cp,例如,我想从不同的目录复制“file to be copy.txt” /home/user1/file-to-be-copied.txt /home/user2/file-to-be-copied.txt /home/user3/file-to-be-copied.txt /home/user4/user1/file-to-be-copied.txt /home/user4/user2/file-to-be-copied.txt /home/user4/user3/file-to-be-cop
/home/user1/file-to-be-copied.txt
/home/user2/file-to-be-copied.txt
/home/user3/file-to-be-copied.txt
/home/user4/user1/file-to-be-copied.txt
/home/user4/user2/file-to-be-copied.txt
/home/user4/user3/file-to-be-copied.txt
然后根据用户帐户创建一个新目录
/home/user4/user1/
/home/user4/user2/
/home/user4/user3/
然后将“要复制的文件.txt”复制到新创建的目录中
/home/user1/file-to-be-copied.txt
/home/user2/file-to-be-copied.txt
/home/user3/file-to-be-copied.txt
/home/user4/user1/file-to-be-copied.txt
/home/user4/user2/file-to-be-copied.txt
/home/user4/user3/file-to-be-copied.txt
我只知道应该使用bash脚本来完成,但我不知道怎么做。这就是我要走的路了
find /home . "file-to-be-copied.txt" | xargs -i mkdir ... cp {} ...
不需要find,更重要的是:不需要xargs(这对于find几乎总是多余的,因为find有-exec)
这是我使用的代码
for f in $(find '/home' -name 'file-to-be-copied.txt')
do
tmpname=${f%/*}
dirname=${tmpname##*/}
mkdir -p /home/user4/$dirname && /bin/cp -p $f /home/user4/$dirname
echo $f copied to /home/user4/$dirname
done
我认为
mkdir&&cp
部分有点错误:它应该复制到/home/user4
。home和file-to-be-copy.txt不需要掩蔽。优雅,但绝对只限于Linux--parent
,而Mac OS X上的cp
(可能来自FreeBSD userland?)不支持。cp选项不应该是--parents()?我认为这是一个打字错误,但我建议的修改答案的建议被拒绝了两次。@SteveMadsen:既然问题被标记为“Linux”,我想你可以原谅它。而且AFAIK GNU cp是免费的、开源的,因此它可以在Linux以外的更多平台上使用。@Chilledrat:谢谢,采用了。手册页将它记录为--parents
,但它也可以在没有“s”的情况下工作。