特定パターンのファイルコピー

特定パターンのファイルコピー

ある場所から別の場所にファイルをコピーしようとしています。以下はいくつかの例です。

aaa_bbb_ccc_ddd_cost_code_20140330.gz
aaa_bbb_ccc_ddd_revenue_zone_20140329.gz
aaa_bbb_ccc_ddd_benefit_extract_20140330.csv.gz
aaa_bbb_ccc_ddd_profit_zone_20150509.csv.gz
aaa_bbb_ccc_ddd_loss_zone_20140330.csv
aaa_bbb_ccc_ddd_username.csv.gz

上記のリストからコピーする必要があるファイルは、次の形式でなければなりません。

aaa_bbb_ccc_ddd_cost[or]revenue[or]benefit[or]profit[or]loss_yyyymmdd.csv.gz

これはファイルを意味します。

aaa_bbb_ccc_ddd_loss_zone_20140330.csv
aaa_bbb_ccc_ddd_username.csv.gz

コピーしないでください。

また、変数に割り当てる必要がありますが、次のように試していますが、うまくいかないようです。

FILENAME="egrep 'aaa_bbb_ccc_ddd_(cost|revenue|benefit|profit)_code_[0-9]{8}.csv.gz'"

変数に割り当てる理由は、後で次のようにコードで使用する必要があるためです。

SOURCE_DIR="/temp"
DESTN_DIR="/output"
FILENAME=`egrep 'aaa_bbb_ccc_ddd_(cost|revenue|benefit|profit)_code_[0-9]{8}.csv.gz'`
echo "FILENAME is:" $FILENAME
for SAMPLE_FILE in $(ls "$SOURCE_DIR/$FILENAME")
do
cp $SAMPLE_FILE $DESTN_DIR
done

これを達成する他の方法はありますか?

ベストアンサー1

Usefind-execそのオプション(ここではGNUを述語findとして使用-regex):

find . -regextype posix-egrep -regex '.*/aaa_bbb_ccc_ddd_(cost|revenue|benefit|profit|loss)_[[:alpha:]]+_[0-9]+\.csv\.gz' -exec mv {} "$DESTN_DIR" \;

メモ:

  • find .find現在のディレクトリから検索するファイルを知らせます。

  • デフォルトでは、GNUはfindemacsスタイルの正規表現を使用します。私はを好む-regextype posix-egrepが、サポートされているおなじみのスタイルに切り替えることができます。

  • 正規表現を使用してファイルを選択します。-regex '.*/aaa_bbb_ccc_ddd_(cost|revenue|benefit|profit|loss)_[[:alpha:]]+_[0-9]+\.csv\.gz'標準プレフィックスaaa_bbb_ccc_ddd_の後に指定された単語の1つ(cost|revenue|benefit|profit|loss)、指定されていない他の単語、_[[:alpha:]]+日付、_[0-9]+最後に希望の拡張子が続きます.csv.gz。これを微調整する必要があるかもしれません。

  • 見つかったすべてのファイルはターゲットディレクトリに移動されます-exec mv {} "$DESTN_DIR" \;。一致するファイルが見つかったら、findこのコマンドを実行して{}ファイルの名前を変更します。これは、ファイル名にスペース、改行、またはその他の読み取れない文字が含まれている場合にも機能します。

正規表現を使用したデフォルト(emacs)スタイル

GNU正規表現のデフォルトスタイルには、findグループ化と代替演算子のいくつかのエスケープが必要です。

find . -regex '.*/aaa_bbb_ccc_ddd_\(cost\|revenue\|benefit\|profit\|loss\)_[[:alpha:]]+_[0-9]+\.csv\.gz' -exec echo mv {} targetdir \;

アップルコンピュータ

Mac OSX バージョンfind(マニュアルページはこちら)はサポートされていますが、-regexサポートされていません-regextype。しかし、正規表現の構文に少しの変更が必要な場合でも驚くことはありません。

IBM AIX 5

IBM AIXバージョンのマニュアルページfindは次のとおりです。ここ。もちろんいいえサポートする-regex

おすすめ記事