我已经使用 Percona XtraBackup 创建压缩备份,但现在我需要解压缩文件。说明说我应该运行:
for bf in `find . -iname "*\.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done
但这看起来它将到处搜索并解压缩找到的任何文件。我只希望它只解压缩一个特定目录及其子目录中的文件。
我尝试运行:
for bf in `find . -iname "/path/to/my/directory/*.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done
但这给出了错误:
find: warning: Unix filenames usually don't contain slashes (though pathnames do).
That means that '-iname `/path/to/my/directory/*.qp'' will probably evaluate to false all the time on this system.
我怎样才能做到这一点?
答案1
for bf in `find . -iname "*\.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done for bf in `find . -iname "/path/to/my/directory/*.qp"`; do qpress -d $bf $(dirname $bf) && rm $bf; done
这两个命令都有很多问题。最明显的是,它们无法通过循环输出find
和无法引用变量来处理不寻常的文件名。
当然,事实上文件名永远不会包含斜杠,如您收到的错误中所述。
你想要的是:
find /path/to/my/directory -type f -iname '*.qp' -exec sh -c 'for f in "$@"; do qpress -d "$f" "$(dirname "$f")" && rm "$f"; done' find-sh {} +
或者,带有换行符的替代版本:
find /path/to/my/directory -type f -iname '*.qp' -exec sh -c '
for f
do
qpress -d "$f" "${f%/*}" &&
rm "$f"
done' find-sh {} +
进一步阅读:
答案2
错误告诉你错误在哪里。不存在以 结尾的文件名/directory/*.qp
。该-iname
参数是关于正确的文件名,而不是路径。
因此,您应该在命令之前添加或编写您想要的cd /path/to/my/directory/
find 命令:从该目录开始,检查与.find /path/to/my/directory/ -iname "*.qp"
*.qp