循环遍历除目录之外的文件

Tõn*_*iip 13 bash for

我需要我的脚本对当前目录中的每个文件(不包括任何子目录)执行某些操作。

比如当前路径下有5个文件,但其中1个是文件夹(子目录)。我的脚本应该在运行所述脚本时激活作为参数给出的命令。即“bash script wc -w”应该给出当前目录中每个文件的字数,而不是任何文件夹,以便输出永远不会有任何“/sub/dir: Is a directory”行。

我目前的脚本:

#!/bin/bash
dir=`pwd`
for file in $dir/*
do
    $* $file
done
Run Code Online (Sandbox Code Playgroud)

我只需要排除循环的目录,但我不知道如何。

lak*_*tak 16

#!/bin/bash -

for file in "$dir"/*
do
  if [ ! -d "$file" ]; then
      "$@" "$file"
  fi
done
Run Code Online (Sandbox Code Playgroud)

请注意,它还排除了符号链接类型的文件,并且符号链接解析为目录类型的文件(这可能是您想要的)。

替代(来自评论),仅检查文件:

for file in "$dir"/*
do
  if [ -f "$file" ]; then
      "$@" "$file"
  fi
done
Run Code Online (Sandbox Code Playgroud)

  • 最好使用 `if [ -f "$file" ]; 然后……`。不是目录不仅会返回常规文件,还会返回套接字和符号链接。 (3认同)