循环遍历并删除特定目录中的标头

循环遍历并删除特定目录中的标头

我只想循环遍历特定目录并删除这些目录中作为输入参数给出的第一行文件。

我的输入参数应该是:

  • -i [input_directory]- 根目录
  • -n [directory]检查文件的目录
  • file ending

运行为

sh -i /main/folder/ -n (sub1|sub2|sub6) .txt

脚本应该只删除 中的文件头以及*.txtsub1的文件夹。sub2sub6/main/folder/

现在我有下面的脚本,它循环遍历所有文件夹并删除标题,但我不确定如何仅循环指定文件夹

for $file in $i/*/*.txt do
    sed '1,1d' $file
done

如果我们改变输入参数的方式是否会有任何用处,请告诉我。

答案1

我对允许指定工作目录的命令的直觉是,它是第一个参数。尽管您可能会丢失-i命令开关,但您已经正确了。

其次,任何具有多个值的选项(例如您要搜索的多个特定子目录)都应该放在最后。这样他们就不会过多干扰其他人。

我建议像这样调用你的命令:

~$ mycommand /my/root/dir "txt" -sdirs sub1 sub2 sub6

Bash 或许也shshift内置的,它可以让你切换给定的参数。您可以从命令行中提取必要的信息,如下所示:

#!/bin/bash

WORK_DIR="$1"
shift # shifts $2 to $1
FILE_END="$1"
shift
if [ "-sdirs" = "$1" ]; then
    shift # get to the sub dirs
    while [ -n "$1" ]; do # tests if there is a sub dir
        # *do your magic here*
        # $1 should be a sub dir
        # $WORK_DIR/$1/*$FILE_END for example

        # to the next one, break if nothing left
        shift || break
    done
else
    echo "No sub directories specified"
    exit 1
fi

这就是我会立即做的事情。更多的错误处理是适当的,并留给读者作为练习。

相关内容