使用xargs批量移动文件到用户指定路径时的路径解析报错问题及解决方法
xargs批量移动文件到用户指定路径时的路径解析报错问题及解决方法
你遇到的这个问题核心是shell路径扩展的时机问题——当你把带~的路径存在$response变量里时,shell不会自动把~解析成你的用户主目录($HOME),xargs执行mv命令时只会把$response当成普通字符串路径,自然就找不到名为~/的目录了。
先梳理下你的场景:你要把最近30分钟修改过的文件列表存到~/temporary_file.txt里,再用xargs批量移动到用户指定路径,但这条命令一直报错:
cat ~/temporary_file.txt | xargs -i mv {} $response
你自己找到的解决方法其实非常稳妥:通过判断$response是否以~/开头,手动把~替换成$HOME完成路径扩展,代码逻辑大概是这样:
if [[ $response == ~/* ]]; then response="$HOME"/"${response:2}" fi
这样处理后,~/target这类路径就会被正确转换成/home/你的用户名/target,mv命令就能定位到正确的目标路径了。
另外给你补充一个小技巧:如果不想写判断逻辑,也可以用eval强制shell重新解析变量里的路径,但要注意eval有安全风险,若用户输入的路径包含特殊字符可能引发问题,示例如下:
eval response="$response"
不过还是更推荐你用自己的判断方法,安全性更高。
备注:内容来源于stack exchange,提问作者Malachy_P
相关产品推荐
相关产品推荐

