仅在Linux中包含指定文件的情况下才复制目录

奇拉克斯

我需要在/ parent下复制所有文件夹(到新位置),但前提是该文件具有123.dat-在这种情况下,我也需要复制该文件夹,但不复制任何其他文件。

这样:

|parent
|    |a
|    |    123.dat
|    |    456.dat
|    |b
|    |    123.dat
|    |    789.dat
|    |c
|    |    456.dat
|    |    789.dat

变成:

|parent
|    |a
|    |    123.dat
|    |b
|    |    123.dat

我该如何在Linux中执行此操作?这个领域不是我的专长,到目前为止,我尝试进行类似搜索的尝试都没有成功。

杰伊

文件/文件夹结构:

$ find src | sort
src
src/a
src/a/123.dat
src/a/456.dat
src/b
src/b/123.dat
src/b/768.dat
src/c
src/c/456.dat
src/c/768.dat

复制匹配文件,保留相对路径(浅,深度不超过1个文件夹):

命令:

$ (cd src && cp -v --parents */123.dat ../dest)

输出:

a -> ../dest/a
'a/123.dat' -> '../dest/a/123.dat'
b -> ../dest/b
'b/123.dat' -> '../dest/b/123.dat'
  • 我在(和时使用了一个子外壳,)以便在使用时不更改原始工作目录cd我不得不进入src执行前cp,以建立src/在底层目录dest
  • 不适用于文件计数超过bash的参数限制的情况(如果我没记错的话,通常为65k左右)

替代方法(find与可调整的深度限制一起使用):

命令:

$ (cd src && find . -maxdepth 2  -type f -name '123.dat' -exec cp -v -t "../dest" --parents {} +)

输出:

./b -> ../dest/./b
'./b/123.dat' -> '../dest/./b/123.dat'
./a -> ../dest/./a
'./a/123.dat' -> '../dest/./a/123.dat'

笔记:

  • 我在(和时使用了一个子外壳,)以便在使用时不更改原始工作目录cd我不得不进入src执行前find,以建立src/在底层目录dest
  • 我指定-type f确保仅123.dat考虑具有名称的文件,而不考虑恰好具有该名称的目录

替代方法(使用rsync,没有深度限制):

命令:

$ rsync -rv --include=123.dat --include='*/' --exclude='*' --prune-empty-dirs src/ dest

输出:

building file list ... done
created directory dest
./
a/
a/123.dat
b/
b/123.dat

sent 205 bytes  received 90 bytes  590.00 bytes/sec
total size is 0  speedup is 0.00

再检查一遍:

$ find dest
dest
dest/b
dest/b/123.dat
dest/a
dest/a/123.dat

笔记:

  • 尾随/src/是故意的,因此,只有该文件夹的内容被复制,而不是文件夹本身。
  • --exclude='*' 默认排除所有内容
  • --include='*/ 覆盖排除并包括所有文件夹
  • --include='123.dat' 覆盖排除项,并包含名称为“ 123.dat”的文件(和文件夹)
  • --prune-empty-dirs确保没有创建空文件夹(例如c

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不复制终端中特定文件或子目录的情况下复制目录?

Perl和LWP:getstore()仅在不指定目录的情况下保存文件

仅在源目录中不存在的情况下删除目标目录中的文件

仅在目录中包含所有工作表的情况下,将目录中的所有Excel文件追加到数组中

awk +仅在文件中未定义行的情况下才在捕获的单词之前添加行

如何在不删除指定文件的情况下反转目录中的删除文件

从指定日期回溯7天,仅在存在该天的情况下才检索值

在没有指定权限的情况下查找目录中的所有文件

仅在文件不同的情况下才如何关闭shutil.copyfile?

仅在文件公开共享的情况下才允许下载Google文档

如何在不复制目录内容的情况下复制文件和目录?

仅在BigQuery中其他列具有特定值的情况下才选择值

为什么仅在特定情况下才需要在方法签名中抛出IOException?

仅在设置了特定值的情况下才更新MySQL查询中的特定列

setLocation在操作中仅在没有整数增量的情况下才执行更改按钮的位置

仅在未安装的情况下才安装 .NET Framework

仅在存在接口的情况下才实现接口?

仅在安装了模块的情况下才需要

WakefulBroadcastReceiver意图仅在某些情况下才开始(奇怪)

仅在满足条件的情况下才执行CHECK语句

如何运行查询以仅在指定的列包含值的情况下提取数据

Access 2016仅在字段包含不同文本的情况下才返回第一条记录

仅在其中包含多年的情况下才拆分字符串,并创建自定义字符串

如何在不更改新文件的情况下复制包含变量的脚本中的特定行

在Linux复制文件中,仅在目标文件较旧时才覆盖

仅在没有相同文件/目录的情况下提取tar

如何包含部分但仅在尚未包含部分的情况下?

如何在不指定父目录的情况下将目录更改为下面两个目录中的任何一个文件夹?

默认情况下,PHP包含文件到所有目录文件