我有十几个没有扩展名的文件,我需要.sh
向所有文件添加一个 Bourne-Again shell 脚本。如何在不使用 sed、awk 的情况下实现这一点……
我像这样定位文件:
file * | grep "Bourne-Again shell"
使用命令 xargs 如何为上面生成的文件添加扩展名?如果可能,必须在管道中包含文件命令来定位文件。
答案1
你可以这样做:
for f in *
do
grep "Bourne-Again shell" <(file "$f") >/dev/null && echo mv "$f" "$f".sh
done
在包含脚本文件的目录中运行上述代码,然后消除 echo
当对输出满意时,进行实际的重命名。
注意:
xargs
并不是最适合此操作的,但如果你坚持的话,可以像这样以丑陋的方式完成:
file * | grep "Bourne-Again shell" | cut -f 1 -d ' ' | rev | cut -c 2- | rev | xargs -I {} -n1 echo mv {} {}.sh
在包含脚本文件的目录中运行上述代码,然后消除 echo
当对输出满意时,进行实际的重命名。
答案2
您可以使用mv
来更改文件名。
例如mv $FILENAME $FILENAME.sh
file * | grep "Bourne-Again shell" | while read FILE; do mv "${FILE}" "${FILE}.sh"; done