我有一个关于 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
这是一个例子