将特定文件移动到两个不同的位置

将特定文件移动到两个不同的位置

我有一个关于 unix 中文件分离的疑问。假设在unix目录中有多个名称不同但扩展名相同的文件。例如

/dir/AB_123yuu.pdf
/dir/SD_234ggj.pdf
/dir/AB_123jlhj.pdf
/dir/DE_373hhj.pdf
etc...

现在的要求是复制所有以name开头的文件 AB_123 ,并同时server1复制剩余的文件。server2

答案1

如果您使用bash扩展的 glob 机制:

shopt -s extglob
cp ABC_123* /server1/
cp !(ABC_123*) /server2/

!(pattern)匹配一切除了给定的模式。


zsh类似的事情下会是

setopt extendedglob
cp AB_123* /server1/
cp *~AB_123* /server2/

甚至更简单

cp ^AB_123* /server2/

答案2

使用该extglob选项,并且rsync

shopt -s extglob
rsync -a AB_123*    server1:/home/foo/files &
rsync -a !(AB_123*) server2:/home/foo/files &

请参阅此问题了解更多信息,

答案3

创建两个数组

AR1:对于具有 AB_123*.pdf 正则表达式匹配的文件

AR2:适用于扩展名为 *.pdf 且不带 AB_123 前缀的文件

用两个 find 命令填充它,并使用 scp 将文件复制到远程服务器


AR1=()

AR2=()

for file in $(find /path -name AB_123*.pdf); do AR1+=($file); done

for file in $(find . -name *.pdf | grep -v /AB_123); do AR2+=($file); done

scp ${AR1[*]} username@server1:/remote/path

scp ${AR2[*]} username@server2:/remote/path

这是一个例子

相关内容