如何重命名旧文件?

时间:2016-01-07 14:09:51

标签: bash sed sh rename

我有一个这样的目录:

-rw-r--r--  1 root root    0 Jan  7 15:04 tmp_FILE2015_123_1_3123.LOG
-rw-r--r--  1 root root    0 Jan  7 15:04 tmp_FILE2015_133_1_3123.LOG
-rw-r--r--  1 root root    0 Jan  7 16:04 tmp_FILE2015_133_1_3125.LOG
-rw-r--r--  1 root root    0 Jan  7 16:04 tmp_FILE2015_133_1__3223125.LOG
-rw-r--r--  1 root root    0 Jan  7 16:04 tmp_FILE2015_133_1_3223125.LOG

我需要删除tmp_,我可以这样做:

for i in *; do s=$(sed -r 's/^(tmp_)(.*.LOG)/\2/' <<< $i); if [[ "$i" != "$s" ]]; then mv "$i" "$s"; fi; done;

但我需要在超过1小时(修改时间)的文件中执行此操作:

例如(现在:1月7日16:10):

-rw-r--r--  1 root root    0 Jan  7 13:00 FILE2015_123_1_3123.LOG
-rw-r--r--  1 root root    0 Jan  7 15:04 FILE2015_133_1_3123.LOG
-rw-r--r--  1 root root    0 Jan  7 15:01 FILE2015_133_1_3125.LOG
-rw-r--r--  1 root root    0 Jan  7 16:04 tmp_FILE2015_133_1__3223125.LOG
-rw-r--r--  1 root root    0 Jan  7 16:10 tmp_FILE2015_133_1_3223125.LOG

我该怎么做?

1 个答案:

答案 0 :(得分:3)

这将对过去一小时内修改的所有文件进行操作:

for orig_file in $(find . -type f -depth 1 -mtime -60m); do
    new_file="${orig_file#./tmp_}"
    if [[ "$new_file" != "$orig_file" ]]; then
        mv "$orig_file" "$new_file";
    fi;
done

如果您要对超过一小时的文件进行操作,请使用+60m代替

我已经改变了使用sed来使用一些内置的bash功能。