Bash 在unix中递归地遍历目录并复制文件
我需要递归地遍历一个目录和所有子目录,并将其中的所有文件复制到一个othet空目录。“From”是我要浏览的目录,并将所有文件复制到“to”。目前,它只是将所有文件从“from”复制到“to”,而不在子目录中。有没有什么办法能奏效,或者有没有其他办法Bash 在unix中递归地遍历目录并复制文件,bash,unix,Bash,Unix,我需要递归地遍历一个目录和所有子目录,并将其中的所有文件复制到一个othet空目录。“From”是我要浏览的目录,并将所有文件复制到“to”。目前,它只是将所有文件从“from”复制到“to”,而不在子目录中。有没有什么办法能奏效,或者有没有其他办法 #/bin/bash from=$1 to=$2 list=`ls -lR $from | grep '^-' | awk '{ print $10; }'` for i in $list do cp $from/$i $to/$i done
#/bin/bash
from=$1
to=$2
list=`ls -lR $from | grep '^-' | awk '{ print $10; }'`
for i in $list
do
cp $from/$i $to/$i
done
您可以使用检查语法,并了解缩进。它将建议对代码进行一些修改。@KamilCuk在评论中也提出了很好的建议
当您需要在子目录中递归地执行某些操作时,始终可以使用find
选项-exec
。您可以使用{}
指定命令应应用于与查找
选项匹配的每个文件(或目录)
这将实现以下技巧:find$from-type f-name“*.txt”-exec cp{}$to\-打印
:查找所有文件-键入f
-exec cp{}$to\代码>:对于找到的每个文件(
),将其复制到$to目录<代码>\代码>为选项{}
限定命令的结尾-exec
:如果要按文件名进行筛选(这里必须有扩展名.txt才能匹配)-name“*.txt”
:如果要查看在目录中复制的文件,请执行以下操作-打印
还要注意的是,
find
即使您有大量的子目录,或者其中有大量的文件,也可以工作ls
有时会失败,或者需要很长时间才能输出大量文件。cp-r“$从“$到”
。Backticks`这是可行的,但它会复制目录和包含文件的子目录。我正在尝试只复制文件。例:a-a.txt-a1--a1.txt我只想复制a1.txt和a.txt,不带目录。你的意思是/from/a//b/c/d/1.txt
应该复制到/to/1.txt
?请在您想要执行的操作之前和之后发布一个示例目录结构,例如以类似于find
输出的格式。并正确缩进您的代码,以供您(您会出错)和我们(不可读)。是的。只复制以.txt结尾的文件。我要复制到的目录应该只有.txt文件。