我知道一个非常奇怪和具体的问题,但这会让我头疼。
是否可以合并目录,同时删除每个子目录中的特定子目录,但保留所有文件?示例
我有
/first/1/files/1.jpg, 2.jpg, 3.jpg
/first/2/files/1.jpg, 2.jpg, 3.jpg
我也有
/second/1/3.jpg, 4.jpg, 5.jpg
/second/2/3.jpg, 4.jpg, 5.jpg
我想将/first
合并到/second
中,同时删除/first
中的中间/files/
目录,但保留所有的jpg。最重要的是,我不希望3.jpg在/second/
中被覆盖
如果时间戳无关紧要,那么您可以执行以下操作:
find /second -name '*.jpg' -exec touch +
for fdir in /first/*/files; do
sdir=${fdir%/files};
sdir=${sdir#/tmp/first};
sdir=/tmp/second${sdir};
cp -u "$fdir/"* "$sdir/";
done
尽管这并不是我所说的一个好的解决方案。
您也可以在循环和复制时手动测试现有文件,如下所示:
for ffile in /first/*/files/*.jpg; do
# Expand the variable and delete '/files'
sfile=${ffile//files}
# Expand the variable and remove the '/first' prefix
sfile=${sfile#/tmp/first}
# Prepend the new '/second' direcory.
sfile=/second${sfile}
# If the exist do nothing. It if doesn't then copy.
[ -f "$sfile" ] || cp -u "$ffile" "$sfile"
done
我觉得用rsync或cpio可能有一个聪明的方法可以做到这一点,但我不知道那是什么。