有人可以很好地解释这段代码中发生的事情吗?
find ./ \
-name "myfile.`date +%Y%m%d`*" \
-size +10 \
-exec mv {} ./"myfile.`date +%Y%m%d`.gz" \; \
2>/dev/null
status=$?
答案 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}
前缀开头的文件,除了一个文件之外的所有文件都会被默默删除。