找到文件,复制但名称不同

找到文件,复制但名称不同

我在 /home/user/files 文件夹中有带有随机数字的文件(每 4 天我就有新的文件)。例如:

john20
john25
john40
tom12
tom32
simon2
simon8
simon53

我只想获取最后修改的文件(最新的)并将它们复制到不同的位置(/home/user/fixed),而文件名中没有该数字。

我知道如何使用 find 命令来过滤和复制它们,但我不知道如何在没有这些数字的情况下复制所有这些数字。

find $files_are_here -maxdepth 1 -mtime -2 -type f -exec cp {} $new_path \;

这会将过去 2 天内修改的所有文件复制到新路径,但保留原始名称。就我而言:

john40
tom32
simon53

但我希望该文件夹中只有约翰、汤姆和西蒙。因此,当我再次运行脚本后,它们将被最新的脚本替换。

答案1

以下内容希望是不言自明的

find -maxdepth 1 -mtime -2 -type f  -exec bash -c 'name=${1##*/}; cp  "$name" /some/other/dir/${name%%[0-9]*}' _ {} \;

答案2

find -mtime -2 \
     -maxdepth 1 \
    \! -type d \
    \( -name 'simon*' \
    -o -name 'tom*' \
    -o -name 'john*' \
    \) | tar -T - \
     --xform='s/[0-9]*$//' \
     -cf - | tar -C ./path/to/destination --keep-newer-files -xf -

我认为这样就可以了——它似乎对我有用。只要simontomjohn文件打算每两天覆盖一次 - 我相信这应该可以做到。要么是这样,要么是非常接近。哦,但是,它确实需要 GNU tar- 可能find也需要 GNU,尽管我不确定后者。我没有太仔细地检查这些,因为其中大部分都是你自己的选择。

相关内容