在UNIX shell脚本中,如何在排除某些特定文件的同时遍历目录中的所有文件?

时间:2018-04-02 14:58:33

标签: shell unix

我在一个文件夹中有1000+文件,我想使用for循环(在Shell脚本中)循环遍历所有文件,除了一些具有特定前缀的特定文件。

例如:

exposureRawFilePath="/aa/bb/*.psv.gz"

sizmekfiles="aa/bb/abcd*.psv.gz"

for dr in $exposureRawFilePath ; do

for dr not in $sizmekfiles ; do

我在上面尝试了这些命令,但它们没有用。你能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

一起使用
for file in /aa/bb/*.psv.gz; do
    [[ $file == /aa/bb/abcd* ]] && continue
    echo "$file"
done

extglob

shopt -s extglob # need for bash if not already enabled, ksh enable it by default

for file in /aa/bb/!(abcd*); do
    echo "$file"
done

甚至是

for file in *; do
    case $file in
        /aa/bb/abcd*.psv.gz) continue ;;
        *) echo "$file" ;;
    esac
done

答案 1 :(得分:0)

您尚未在问题中标记bash,因此这是POSIX方式使用case完成工作:

for f in /aa/bb/*.psv.gz; do
   case "$f" in
      /aa/bb/abcd*.psv.gz)
         continue;;
      *)
         echo "processing $f";;
   esac
done