使用 ksh 替换文件中的多个字符串

使用 ksh 替换文件中的多个字符串

我有一个目录,其中所有文件都以.ear.我想删除.ear并仅保留文件名。我可以吗?

当我尝试时

cd /path/
ls >> file

然后在输出文件中,file存储的目录名称包含所有文件,包括.ear末尾的文件。我想删除.ear并只保留该文件的名称。

答案1

/path要在目录中创建文件名以 结尾的文件名列表.ear,同时删除该后缀:

for name in /path/*.ear; do
    basename "$name" .ear
done >list

basename实用程序返回路径名的文件名部分,如果提供了第二个参数,则该参数将被视为应从每个名称末尾删除的字符串。

在上面的循环中,我们仅迭代与模式匹配的文件/path/*.ear,提取不带后缀的文件名.ear,并将列表写入名为 的文件list

这也将正确处理包含换行符的文件名,例如文件名

$'my.left.ear\ncollection 1.ear'

答案2

你要:

ls *.ear | sed 's/\.ear$//' >list.txt

如果您不喜欢使用输出,ls您也可以这样做:

printf "%s\n" *.ear | sed 's/\.ear$//' >list.txt

printf在不是内置的shell 中(或使用ls上面的形式),理论上您可以达到参数数量的限制,但如果这些 EAR 文件是我熟悉的文件,您将不会获得数千个。

相关内容