gpt4 book ai didi

linux - 从 ls 中排除某些目录并将其余目录复制到共享路径

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:44 25 4
gpt4 key购买 nike

我有一个包含子目录 A、B、C 和 D 的文件夹。我需要将目录 A 和 D 复制到另一个名为 'copy' 的目录,同时排除 B 和 C(即 B 和 C 没有得到复制过来)。我正在考虑执行以下操作(在命令行伪代码中):

ls (selective ls on the source directory) | 
scp -r {returned value from the ls} {target directory}

是否有 Linux 命令行方式来完成上述任务?

最佳答案

我建议为此使用 find。

让我们创建一些测试对象:

$ mkdir -p ./testing/test{1,2,3,4}
$ touch ./testing/test{1,2,3,4}/test{a,b}

将导致:

$ ls -R ./testing
./testing:
test1 test2 test3 test4

./testing/test1:
testa testb

./testing/test2:
testa testb

./testing/test3:
testa testb

./testing/test4:
testa testb

现在,运行

$ mkdir ./testing/copy
$ find ./testing/ -mindepth 1 -maxdepth 1 ! -name test1 ! -name test3 ! -name copy -execdir cp -R '{}' ./copy/ ';'

将导致:

$ ls -R ./testing/
./testing/:
copy test1 test2 test3 test4

./testing/copy:
test2 test4

./testing/copy/test2:
testa testb

./testing/copy/test4:
testa testb

./testing/test1:
testa testb

./testing/test2:
testa testb

./testing/test3:
testa testb

./testing/test4:
testa testb

背景资料:

总结:找到需要复制的目录,执行复制命令。在这种情况下,让我们复制除“test1”和“test3”之外的所有目录。

-mindepth 1 选项将阻止 find 包含 .可能还有 .. 目录,因为它们的深度为 0。

-maxdepth 1 选项将阻止 find 单独复制每个子目录。命令 cp -R 处理子目录,因此它们被覆盖。

使用 -execdir 而不是 -exec,这样您就不必将整个路径作为 cp 命令的目标目录。

在运行 find 之前不要忘记 mkdir 你的目标目录,并且不要忘记从结果中排除这个目录!因此! -name copy 我的示例中的选项。

我希望这能为您指明正确的方向。

关于linux - 从 ls 中排除某些目录并将其余目录复制到共享路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10883300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com