我在Bash中遇到了一些问题.例如:
echo *
Run Code Online (Sandbox Code Playgroud)
这将打印出当前目录中的所有文件和文件夹.例如(file1 file2 folder1 folder2)
echo */
Run Code Online (Sandbox Code Playgroud)
这将使用名称后面的/打印出所有文件夹.例如(folder1/folder2 /)
我怎么能只为文件选择?例如(file1 file2)
我知道这可以通过解析ls来完成,但也知道这是一个坏主意.我尝试使用扩展blobbing,但也无法使用它.
无需使用任何外部工具,你可以尝试for loop使用glob support:
for i in *; do [ -f "$i" ] && echo "$i"; done
Run Code Online (Sandbox Code Playgroud)
我不知道你是否可以通过globbing来解决这个问题,但你可以用find来解决它:
find . -type f -maxdepth 1
Run Code Online (Sandbox Code Playgroud)
小智 5
你可以在 bash 中做你想做的事情,如下所示:
shopt -s extglob
echo !(*/)
Run Code Online (Sandbox Code Playgroud)
但请注意,这实际上是匹配“非目录类”。
它仍然会匹配悬空符号链接、指向非目录、设备节点、fifo 等的符号链接。
但它不会匹配指向目录的符号链接。
如果您只想迭代普通文件,请使用find -maxdepth 1 -type f.
安全可靠的使用方法如下:
find -maxdepth 1 -type f -print0 | while read -d $'\0' file; do
printf "%s\n" "$file"
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6033 次 |
| 最近记录: |