我在互联网上找到了如何做到这一点:
basename -s .txt *.txt | xargs -n1 -i mv {}.txt {}.sh
xargs: illegal option -- r
usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr]
[-L number] [-n number [-x]] [-P maxprocs] [-s size]
[utility [argument ...]]
我在habr上找到了一个选项:
ls | sed -e "p;s/.txt/.sh/" | xargs -2 -fmv
xargs: illegal option -- 2
usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr]
[-L number] [-n number [-x]] [-P maxprocs] [-s size]
[utility [argument ...]]
rename 's/.txt/.sh/g' *.txt
-bash: rename: command not found
man rename - open 我做错了什么?PS OS X 系统
我更喜欢使用命令生成来重命名
sed,符合 POSIX 的版本看起来像这样:可能会盲目地复制在 Internet 上找到的代码,而不是查看系统文档/阅读错误。显然,这是主要的错误。
MacOS 使用一组标准的 BSD 派生实用程序,这些实用程序不支持在 GNU/Linux 和其他更奇怪的 GNU/* 系统上如此流行的许多 GNU 扩展。
安装手册页的事实并不意味着安装了程序本身。
怀疑使用了别名,因为该选项
-r不在参数中。因此,我们调试:如何在 bash 中调试
进入终端
调试模式已启用。然后输入你的命令
我们得到这样的东西:
Bash 替换了
*.txt真实的文件名。并且还将管道拆解成单独的命令。并且还显示了所有参数的确切执行情况。在这个例子中,我在调用前专门创建了一个别名:alias xargs="xargs -- r"来得到这个错误。您的代码正在运行。为什么它不起作用将有助于set -x在开始之前找出答案。如果这是一个脚本,则可以在有问题的行之前立即打开调试,然后像这样关闭:
set +x. 或/bin/bash -x ваш-скрипт.sh。或者更改脚本开头的行:#!/bin/bash -x解决方案
从评论中发现问题仍然是这样的:
xargs: illegal option -- i因此,我们阅读
man xargs并看到:该选项已弃用,并且在此版本的 xargx(哪个?)中似乎不再受支持。
如何修复:
-i替换为-I{}:在这个问题上
xargs: illegal option -- r,法力说:我猜想
-r在 GNU/Linux 上工作,在 macOS 上不工作