ls -1 /a/dir/*/dir/* | 在读取 VAR 时;做回声 ${VAR%.???}; 完毕
你可以在do和done之间做任何你想做的事情,echo只是一个例子。
man bash(参数扩展):
${parameter%%word}
The word is expanded to produce a pattern just as in pathname expansion.
If the pattern matches a trailing portion of the expanded value of param‐
eter, then the result of the expansion is the expanded value of parameter
with the shortest matching pattern (the ‘‘%’’ case) or the longest match‐
ing pattern (the ‘‘%%’’ case) deleted. If parameter is @ or *, the pat‐
tern removal operation is applied to each positional parameter in turn,
and the expansion is the resultant list. If parameter is an array vari‐
able subscripted with @ or *, the pattern removal operation is applied to
each member of the array in turn, and the expansion is the resultant
list.
类似的东西会列出当前目录中的文件,删除第一个点之后的所有内容。
find . -maxdepth 1 -type f | xargs -iZ basename Z | cut -d"." -f1 > /tmp/resultfile
最终会出现隐藏文件问题,导致结果文件中出现空白行。Basename 在这里只是为了摆脱查找结果中以文件名开头的“./”。
我总是喜欢包含一个仅限 bash 的解决方案:
并使用可选的 if 语句将文件限制为您请求的扩展名:
在这个类似的服务器故障问题中,我解释了“${file%.*}”参数扩展。
怎么样:
应该做你想做的。
它比人们想象的要简单得多:
所以以这种方式:
你可以在do和done之间做任何你想做的事情,echo只是一个例子。
man bash(参数扩展):
一个更通用的答案,找到任何长度的扩展:
然后我使用以下命令获取目录中的扩展名列表:
您也可以像这样使用 cut :
仅当您没有任何带有“。”的文件或目录时,它才会起作用。在名字里
您已经给出了扩展的明确定义,
但是,标签
linux
并bash-scripting
建议了一个 unix 环境。除非您在 Windows 上使用 Cygwin 执行此操作。
在那种情况下,这些点可能无关紧要......
md5
)script.sh
)