在unix中,找到并压缩后用xargs移动文件?

时间:2014-06-28 11:03:22

标签: bash unix ubuntu

所以在bashscript中我有以下非常简单的一行,但是如何将其进一步链接以移动文件?

find . -type f -ctime -$2 -name "mylog*.log" | xargs bzip2

这很好用,但我也想在完成bzip2后将文件移动到新目录。

2 个答案:

答案 0 :(得分:1)

一个选项可能是这样的:

find . -type f -ctime -$2 -name "mylog*.log" -exec bzip2 {} \; -exec mv {} /path/to/new_dir/ \; 

答案 1 :(得分:1)

一个标准技巧是使用一个可以满足您需求的新脚本。在这里,我假设${OTHER_DIRECTORY}是一个环境变量,说明放置压缩文件的位置,但是有很多其他(更好的!)方法可以将这些信息提供给脚本(例如将目录指定为第一个参数 - 作为最后一个参数是一个坏主意。)

#!/bin/bash

for file in "$@"
do
    bzip2 "$file"
    mv "$file.bz2" "${OTHER_DIRECTORY:-/tmp}"
done

然后使用find运行该脚本:

find . -type f ctime -$2 -name "mylog*.log" -exec tinyscript.sh {} +

这非常有效。如果您只需要一个mv命令,则可以考虑以下内容:

bzip2 "$@"
bz2=()
for file in "$@"; do bz2+=( "$file.bz2" ) done
mv "${bz3[@]}" "${OTHER_DIRECTORY:-/tmp}"

即使路径名包含空格和其他不良字符,此代码仍然有效。

相关问题