特定のディレクトリのヘッダーを繰り返し削除します。

特定のディレクトリのヘッダーを繰り返し削除します。

特定のディレクトリを繰り返し、入力パラメータとして指定されたそのディレクトリからファイルの最初の行を削除したいと思います。

私の入力パラメータは次のようになります。

  • -i [input_directory]- ルートディレクトリ
  • -n [directory]ファイルのディレクトリを確認してください。
  • file ending

次に実行

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

スクリプトはのファイルヘッダーとその*.txt下のsub1フォルダのみを削除する必要があります。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には、指定されたパラメータを切り替えることができる組み込み機能が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

それが私がすることです。追加のエラー処理が適切であり、読者の練習問題として残しておきます。

おすすめ記事