我正在尝试循环遍历目录中以 .txt 结尾的所有文件并重命名它们(将开头替换为结尾)。但是,我想从这个 for 循环中获取输出并将其传输到 bash 文件,以便我可以检查文件并确保我所写的内容符合我的要求,然后如果我看到的内容符合任务要求,我就可以执行 .bash 文件。我试过了
for file in *.txt ; do mv $file ${file//beginning/end} ; done | rename.bash
但是这会重命名该文件并创建一个空的 rename.bash
答案1
放在echo
之前mv
。这将打印命令而不是执行它。
还有:
引用变量以避免分词在文件名中的空格上。在这种情况下,您需要将引号放在引号中,因为您要输出到脚本。
我从未见过
.bash
使用中的扩展,因此我.sh
更喜欢使用输出脚本。您无法直接通过管道连接到文件。请改用输出重定向
>
。如果您需要使用管道,请使用tee
。
总共:
for file in *.txt; do
echo "mv '$file' '${file//beginning/end}'"
done > rename.sh
答案2
因为mv
没有输出任何内容,而且您无法将其传输到文件中。
你能要做的是使用重定向器创建一个 bash 脚本:
for file in *.txt
do
echo "mv $file $(some command to manipulate the text)" >> script.bash
done
这会将命令附加到文件。