我想要重命名一些文件。我想我可以使用 xargs 来做到这一点。
find ./ -name "upload.log-*"
./upload.log-20180622.gz-20180624.gz-20180626.gz
./upload.log-20180624.gz-20180626.gz
./upload.log-20180620.gz-20180622.gz-20180624.gz-20180626.gz
./upload.log-20180621.gz-20180623.gz-20180625.gz-20180627.gz
find ./ -name "upload.log-*" -print | cut -d"-" -f-2
./upload.log-20180622.gz
./upload.log-20180624.gz
./upload.log-20180620.gz
./upload.log-20180621.gz
我正在尝试以下方法,但似乎不起作用
find ./ -name "upload.log-*" | xargs -I '{}' sh -c "echo $1 $(echo $1 | cut -d"-" -f-2)" "{}"
答案1
这正是我需要的
find ./ -name "cleanup.log-*" | xargs -I '{}' sh -c 'mv "$1" $(echo {} | cut -d"-" -f-2)' - {}
棘手的部分是将 xargs 替换-I {}
字符串转换为 xargs 命令的参数sh -c ...
。我通过在命令末尾的替换字符串之前
放置一个无选项参数来实现此目的。-
{}
因此我对 xargs 的命令如下。
sh -c 'mv "$1" $(echo {} | cut -d"-" -f-2)' - {}
在运行移动命令之前,我用它来测试我想要什么
find ./ -name "upload.log-*" | xargs -I '{}' sh -c 'echo "$1" $(echo {} | cut -d"-" -f-2)' - {}
我发现这个网站对理解如何解决这个问题很有帮助