![将特定文件移动到两个不同的位置](https://linux22.com/image/124698/%E5%B0%86%E7%89%B9%E5%AE%9A%E6%96%87%E4%BB%B6%E7%A7%BB%E5%8A%A8%E5%88%B0%E4%B8%A4%E4%B8%AA%E4%B8%8D%E5%90%8C%E7%9A%84%E4%BD%8D%E7%BD%AE.png)
我有一个关于 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
这是一个例子