Rsync - 文件结尾相同的文件

时间:2017-12-09 20:25:25

标签: rsync

我在大型目录结构中有这些JSON文件。有些只是" abc.json"还有一些已添加的" .finished"。我想只对没有" .finished"。

的文件进行rsync
$ find
.
./a
./a/abc.json.finished
./a/abc.json                <-- this file
./a/index.html
./a/somefile.css
./b
./b/abc.json.finished
./b/abc.json                <-- this file

示例rsync命令,复制所有&#34; abc.json&#34;和&#34; abc.json.finished&#34;。我只想要&#34; abc.json&#34;。

$ rsync --exclude="finished" --include="*c.json" --recursive \
    --verbose --dry-run . server:/tmp/rsync
sending incremental file list
created directory /tmp/rsync
./
a/
a/abc.json
a/abc.json.finished
a/index.html
a/somefile.css
b/
b/abc.json
b/abc.json.finished

sent 212 bytes  received 72 bytes  113.60 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

更新:在文件夹中添加了更多文件。我的方案中存在HTML文件,CSS和其他文件。只有以&#34; c.json&#34;结尾的文件应转移。

可以使用以下命令重新创建场景:

mkdir a
touch a/abc.json.finished
touch a/abc.json
touch a/index.html
touch a/somefile.css
mkdir b
touch b/abc.json.finished
touch b/abc.json

2 个答案:

答案 0 :(得分:1)

尝试以下命令。它假定您还希望在目标位置复制源目录树(对于包含以c.json 结尾的文件的任何目录):

$ rsync --include="*c.json" --exclude="*.*" --recursive \ --verbose --dry-run . server:/tmp/rsync

命令说明:

  • --include="*c.json" 仅包含名称结束c.json

  • 的资产
  • --exclude="*.*" 排除所有其他资源(即名称中包含点.的资产)

  • --recursive 递归目录。

  • --verbose 将结果记录到控制台。

  • --dry-run 会显示已复制的内容,而不会实际复制文件。应省略此选项/标志以实际执行复制任务。

  • . 源目录的路径。

  • server:/tmp/rsync 目标目录的路径。

编辑:不幸的是,上面提供的命令还会复制文件名不包含点字符的文件。为避免这种情况,请考虑按以下方式使用rsyncfind

$ rsync --dry-run --verbose --files-from=<(find ./ -name "*c.json") \ ./ server:/tmp/rsync

这利用进程替换,即<(list),将find命令的输出传递给--files-from=命令的rsync选项/标志。

源代码树

.
├── a
│   ├── abc.json
│   ├── abc.json.finished.json
│   ├── index.html
│   └── somefile.css
└── b
    ├── abc.json
    └── abc.json.finished.json

结果目标树

server
└── tmp
     └── rsync
        ├── a
        │   └── abc.json
        └── b
            └── abc.json

答案 1 :(得分:0)

hacky解决方案是使用grep 创建一个包含我们要传输的所有文件名的文件。

find |grep "c.json$" > rsync-files
rsync --files-from=rsync-files --verbose --recursive --compress --dry-run \
    ./ \
    server:/tmp/rsync
rm rsync-files

&#39; rsync-files&#39; 的内容:

./a/abc.json
./b/abc.json
运行 rsync 命令时

输出

sending incremental file list
created directory /tmp/rsync
./
a/
a/abc.json
b/
b/abc.json