nel*_*aro 2 bash sh xargs pipe command-line-arguments
我想重命名一些文件。我想我可以使用 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
Run Code Online (Sandbox Code Playgroud)
我正在尝试以下操作,但似乎不起作用
find ./ -name "upload.log-*" | xargs -I '{}' sh -c "echo $1 $(echo $1 | cut -d"-" -f-2)" "{}"
Run Code Online (Sandbox Code Playgroud)
这做我需要它做的事
find ./ -name "cleanup.log-*" | xargs -I '{}' sh -c 'mv "$1" $(echo {} | cut -d"-" -f-2)' - {}
Run Code Online (Sandbox Code Playgroud)
棘手的一点是将 xargs 替换-I {}
字符串转换为 xargs 命令的参数sh -c ...
。
我通过-
在替换字符串之前的命令末尾放置一个 no option 参数来做到这一点{}
。
因此,我对 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)' - {}
Run Code Online (Sandbox Code Playgroud)
我发现这个网站有助于理解如何解决这个问题
归档时间: |
|
查看次数: |
4823 次 |
最近记录: |