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