Centos:合并目录,同时删除所有子目录中的公共子目录



我知道一个非常奇怪和具体的问题,但这会让我头疼。

是否可以合并目录,同时删除每个子目录中的特定子目录,但保留所有文件?示例

我有

/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可能有一个聪明的方法可以做到这一点,但我不知道那是什么。

相关内容

  • 没有找到相关文章

最新更新