特定のディレクトリを繰り返し、入力パラメータとして指定されたそのディレクトリからファイルの最初の行を削除したいと思います。
私の入力パラメータは次のようになります。
-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には、指定されたパラメータを切り替えることができる組み込み機能が1つ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
それが私がすることです。追加のエラー処理が適切であり、読者の練習問題として残しておきます。