如何使我的命令行能在extention(.sh)和名称为 "weird.sh.sh "的文件上运行?

问题描述 投票:0回答:1

我需要写一个命令行,搜索当前目录及其所有子目录中所有以".sh "结尾的文件名(没有引号)。它应该只显示没有扩展名.sh的文件名。这是我的命令脚本。

#!/bin/bash
find . -not -name "*.sh"  | sed -e 's/\..*$//'

我的命令脚本: 我的错误在哪里? 我怎样才能改变它,使它能用在像weird.sh.sh这样的文件上呢? 我的命令必须只打印所有文件的名称,除了带有.sh扩展名的文件。

$>./my_find_sh | cat -e
file1$
file2$
file3$
$> 
bash command
1个回答
0
投票

使用 -不是 将会产生相反的效果,它将选择所有不以.sh结尾的文件。

要删除像...sh.sh.sh这样的文件,你必须使用 (\.sh)*$ 因为 ()* 如果存在,则重复该模式

find . -name "*.sh" | sed -E 's/(\.sh)*$//'

如果你有

-rw-r--r--  1  test2.sh
-rw-r--r--  1  test3.sh
-rw-r--r--  1  test4.sh.sh.sh.sh
-rw-r--r--  1  text1.sh

并运行

find . -name "*.sh" | sed -E 's/(\.sh)*$//'

你得到

test2
test3
text1
test4

如果你只想删除一次".sh",那么就用这个。

find . -name "*.sh" | sed -E 's/\.sh$//'

将输出这个。

test2
test3
text1
test4.sh.sh.sh

检查代码


0
投票

出于这个原因,我对文件有一个命名方案。 我总是在文件名中的任何扩展名前加上一个加号(+),这样我就可以用它作为剪切的分隔符。

echo test+.sh | cut -d'+' -f1

这将产生 "测试"。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.