Bash 在unix中递归地遍历目录并复制文件

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

我需要递归地遍历一个目录和所有子目录,并将其中的所有文件复制到一个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 
您可以使用检查语法,并了解缩进。它将建议对代码进行一些修改。@KamilCuk在评论中也提出了很好的建议

当您需要在子目录中递归地执行某些操作时,始终可以使用
find
选项
-exec
。您可以使用
{}
指定命令应应用于与
查找
选项匹配的每个文件(或目录)

这将实现以下技巧:
find$from-type f-name“*.txt”-exec cp{}$to\-打印

  • -键入f
    :查找所有文件
  • -exec cp{}$to\:对于找到的每个文件(
    {}
    ),将其复制到$to目录<代码>\为选项
    -exec
    限定命令的结尾
  • -name“*.txt”
    :如果要按文件名进行筛选(这里必须有扩展名.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文件。