我只想循环遍历特定目录并删除这些目录中作为输入参数给出的第一行文件。
我的输入参数应该是:
-i [input_directory]
- 根目录-n [directory]
检查文件的目录file ending
运行为
sh -i /main/folder/ -n (sub1|sub2|sub6) .txt
脚本应该只删除 中的文件头以及*.txt
下sub1
的文件夹。sub2
sub6
/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 或许也sh
有shift
内置的,它可以让你切换给定的参数。您可以从命令行中提取必要的信息,如下所示:
#!/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
这就是我会立即做的事情。更多的错误处理是适当的,并留给读者作为练习。