仅限Bash中的文件

时间:2013-12-23 14:36:36

标签: bash glob

我在Bash中遇到了一些问题。例如:

echo *

这将打印出当前目录中的所有文件和文件夹。 例如(file1 file2 folder1 folder2)

echo */

这将打印出名称后带/的所有文件夹。 例如(folder1 / folder2 /)

我怎么能只为文件选择? 例如(file1 file2)

我知道可以通过解析ls来完成,但也知道it is a bad idea。我尝试使用扩展blobbing但是无法使用它。

4 个答案:

答案 0 :(得分:8)

如果不使用任何外部工具,您可以for loopglob support一起尝试

for i in *; do [ -f "$i" ] && echo "$i"; done

答案 1 :(得分:5)

我不知道你是否可以通过globbing解决这个问题,但你可以用find来解决它:

find . -type f -maxdepth 1

答案 2 :(得分:3)

你可以像这样在bash中做你想做的事情:

shopt extglob
echo !(*/)

但请注意,这实际上做的是匹配“不是目录喜欢。”
它仍将匹配悬空符号链接,指向非目录的符号链接,设备节点,fifos等。

但它不会匹配指向目录的符号链接。

如果您想迭代普通文件而不再需要,请使用find -maxdepth 1 -type f

安全可靠的使用方式如下:

find -maxdepth 1 -type f -print0 | while read -d $'\0' file; do
  printf "%s\n" "$file"
done

答案 3 :(得分:0)

在这种情况下,我将使用 find 命令。我只需要使用它来查找/替换给定目录中的数十个实例。我敢肯定还有很多其他方法可以给这只猫剥皮,但上面的纯 for 示例不是递归的。

for file in $( find path/to/dir -type f -name '*.js' );
    do sed -ie 's#FIND#REPLACEMENT#g' "$file";
    done