Bash

查找文件,複製但名稱不同

  • April 9, 2020

我在 /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

但我希望該文件夾中只有 john、tom 和 simon。所以在我再次執行我的腳本後,它們將被最新的替換。

以下是希望不言自明的

find -maxdepth 1 -mtime -2 -type f  -exec bash -c 'name=${1##*/}; cp  "$name" /some/other/dir/${name%%[0-9]*}' _ {} \;
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,tomjohn文件打算每兩天覆蓋一次 - 我相信應該這樣做。要麼是那個,要麼是非常接近。哦,但是,它確實需要 GNU tar- 可能也需要 GNU find,儘管我不確定後者。我沒有仔細檢查這些,因為其中大部分是您自己的選擇。

引用自:https://unix.stackexchange.com/questions/152231