【问题标题】:How can i copy the contents of a directory located in multiple locations using find command and preserving directory structure?如何使用 find 命令复制位于多个位置的目录的内容并保留目录结构?
【发布时间】:2019-01-09 21:25:43
【问题描述】:

我在一个父目录dist 下的多个目录下有一个名为accdb 的文件夹。我想为所有目录复制accdb的内容,同时保留代码结构

我成功地制作了递归文件夹结构:

cd ~/dist; find . -name "accdb" -type d -exec mkdir -p -- ~/acc_trial/{} \; 

但我无法复制accdb 的内容。这个命令只是使结构直到目录accdb

我试过了

find . -name "accdb" -type d -exec mkdir -p -- ~/acc_trial/{} \ && cp -r {} ~/acc_trial/{} \;

我收到一个错误:

发现:`-exec' 缺少参数

【问题讨论】:

标签: bash


【解决方案1】:

我不知道这是否可能仅使用 find 表达式,我很确定它不是。此外,您必须考虑,如果您在一个 accdb 文件夹中有一个名为 accdb 的子文件夹,您可能会遇到错误,这就是为什么在我制作的脚本中我决定使用 rsync:

#!/bin/bash
DEST='/home/corronx/provisional/destination_dir'
#Clean destination directory, PLEASE BE CAREFUL IT MUST BE A REMOVABLE DIRECTORY
rm -rf $DEST/*

FIND='test'
LOOK_PATH='/home/corronx/provisional'
FILES=($(find . -type d -name $FIND))


for ((i=0; i<${#FILES[@]};i++))
do
        #Remove first character .
        FILES[$i]=${FILES[$i]:1:${#FILES[$i]}}
        #Create directories in destination path
        mkdir -p $DEST${FILES[$i]}
        rsync -aHz --delete ${FILES[$i]:1:${#FILES[$i]}}/ $DEST${FILES[$i]}
        echo $i
done

说明

首先,我建议在脚本中使用完整路径,因为脚本中的 rm -rf 表达式非常危险(如果您想在运行脚本之前注释该行并删除目标文件夹)。

DEST= 目标路径。

FIND= 您正在查找的子文件夹名称。

LOOK_PATH= 要执行查找的路径

我创建了一个名为FILES 的数组,其中包含所有返回查找表达式的文件夹,之后我只创建目标目录并运行rsync 来复制文件,我使用了rsync,因为我认为它在如果有同名的子目录。

请注意rm -rf 表达式,如果未设置 DEST,您将删除机器中的所有内容

【讨论】:

    猜你喜欢
    • 2020-06-02
    • 2017-06-22
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多