示例:merge dirA/ dirB/ dirDEST/
dirA和dirB中的所有现有文件(不是目录)必须移动到dirDEST。如果dirA和dirB中同时出现两个同名文件,则移动到dirDEST的文件必须是最近修改过的文件,另一个必须保留在源目录中。
当我有来自dirA和dirB的列表文件(例如find /dirA -type f
和find dirB/ -type f
)时,如何比较e选择正确的文件并使用mv移动?
对于我可以使用的文件的比较修改时间:
if [ "$file1" -ot "$file2" ]; then
...
fi
答案 0 :(得分:1)
首先创建所有文件的联合,然后浏览列表并检查三种情况
这是一个没有find
只使用globing的例子。这意味着它仅适用于一个目录级别。
#! /bin/bash
union()
{
local f
for f in dir{A,B}/*; do
basename "$f"
done |
sort -u
}
for f in $(union); do
a="dirA/$f"
b="dirB/$f"
if [ -e "$a" ]; then
if [ -e "$b" ]; then
# file exists in dirA and dirB
if [ "$a" -nt "$b" ]; then
mv "$a" dirC/.
else
mv "$b" dirC/.
fi
else
# file exists in dirA but not in dirB
mv "$a" dirC/.
fi
else
# file exists in dirB but not in dirA
mv "$b" dirC/.
fi
done