Bash:查找,复制和重命名文件

时间:2015-03-08 11:32:02

标签: bash copy find rename

我正在尝试使用文件名(Unix时间戳)复制在过去24小时内创建的文件(在同一台服务器上):

find /srv/docs/files/ -type f -iname '*.pdf' -mtime -1 -exec cp {}   /srv/docs/pdf \;

但是,我想进一步扩展这一点。我想完成以下任务:

  1. 所有文件都以这种方式命名1425787200.pdf。我想重命名文件Sunday-0400.pdf
  2. 我想创建一个新目录/ srv / docs / pdf / day / time /。
  3. 名为1425787200.pdf的文件将以/srv/docs/pdf/Sunday/0400/Sunday-0400.pdf结尾

    此外,如果文件已存在,则应将增量编号添加到文件中。例如Sunday-0400-1.pdf,Sunday-0400-2.pdf

    任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

要将文件名1425787200.pdf更改为/srv/docs/pdf/Sunday/0400/Sunday-0400.pdf,请使用以下内容:

#!/usr/bin/bash
file=1425787200.pdf
day=$(date +"%A" -d "@${file%.*}")
time=$(date +"%H%M" -d "@${file%.*}")
new_file=/srv/docs/pdf/$day/$time/$day-$time.pdf
if [ -e "$new_file" ]; then
    num_file=${new_file%.*}
    num=1
    while [ -e "${num_file}-${num}.pdf" ]; do
        num=$(( num + 1 ))
    done
    new_file=${num_file}-${num}.pdf
fi
mv $file $new_file

这也将重复数字。