我在大型目录结构中有这些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
答案 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
目标目录的路径。
编辑:不幸的是,上面提供的命令还会复制文件名不包含点字符的文件。为避免这种情况,请考虑按以下方式使用rsync
和find
:
$ 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