我有一个包含多个文件的目录,其中一些文件是 bash 脚本,但它们的名称不包含 .sh 扩展名。我知道我需要使用 file 命令来了解带有 -type 选项的文件类型,我也知道我可以使用 xargs 重定向输出,以便我可以使用原始名称 + .sh 扩展名重命名文件。问题是我不知道如何将所有命令连接在一起,以及如何查找只有 bash ASCII 文本可执行文件的文件类型。知道如何用一个简单的命令做到这一点吗?
尽管这不能完成您的作业,但不需要find
as grep
kann 递归搜索文件目录-r
(甚至在使用通配符传递文件名时也不需要)
grep -lIw '^#!.*bash' dir/!(*.sh) | xargs -I_ mv _ _.sh
grep -r
dir将搜索所有子目录中的所有文件(此处未使用)
grep-l
类似于-H
为每个匹配打印文件名,但抑制正常输出。此外,它在第一场比赛后停止类似于-q
或-m1
grep-I
排除二进制文件,只处理文本文件
grep -w
bash将只匹配整个单词(不匹配bash ed)
正则表达式^
#!仅匹配行首(不匹配 # #!)
正则表达式.
匹配任何字节*
任何出现 =.*
任何字符串
路径名扩展(通配)*.sh
匹配模式 file.sh
扩展通配符!(pattern)
匹配除模式之外的任何内容
LSdir/!(*.sh)
列出的所有文件目录不包括DIR / file.sh文件
xargs-I
模式将在此示例中使用的每个位置模式上插入参数_
:
mv _ _ .sh
mv file1 file1.sh
mv file2 file2.sh
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句