这些shell脚本的作用是什么?

时间:2013-11-18 14:14:24

标签: bash shell unix

有人可以很好地解释这段代码中发生的事情吗?

find ./ \
  -name "myfile.`date +%Y%m%d`*" \
  -size +10 \
  -exec mv {} ./"myfile.`date +%Y%m%d`.gz" \; \
  2>/dev/null
status=$?

1 个答案:

答案 0 :(得分:2)

名称以myfile.${current_date}开头的当前目录下的文件(其中${current_date}是YYYYmmdd形式的日期)在名称的末尾添加了.gz,在中等大小的车中方式。

逐行分解:

find ./ \                           # find files under the current directory
  -name "myfile.`date +%Y%m%d`*" \  # ...only if their name starts with "myfile."
                                    #    followed by the current date as of when
                                    #    this command is started
  -size +10 \                       # ...and only if they're larger than 10
                                    #    512-byte blocks
  -exec mv {} ./"myfile.`date +%Y%m%d`.gz" \; \
                                    # ...and append ".gz" to their names
  2>/dev/null                       # ...and discard any error messages.

status=$?                           # store the exit status of the previous
                                    # ...command in the variable named "status".

顺便说一句,以这种方式运行date意味着如果这是在午夜边界旁边开始的,那么输出文件实际上可能与输入文件的日期不同;这使得这个命令非常危险。而且,它不保留源目录;为防止递归,需要向-maxdepth 1添加find参数。

这也是危险的,因为它会丢弃后缀 - 如果你有多个以myfile.${date}前缀开头的文件,除了一个文件之外的所有文件都会被默默删除。