Linux環境の特定のディレクトリからすべての項目を選択する必要があります。文書特定の日付(例:7日)以降、すべての日付以降の編集目次(ルートディレクトリにのみあるため再帰的ではありません)同じ日付以降に作成されました。
その後、最後に与えられた規則を除いて3つのディレクトリを処理する必要があります。そのためには、プロセスは各パスで反復的でなければなりません。これらのディレクトリの1つには、とにかく除外する必要があるファイルがあります。
最後に、これらのパターンに一致するすべてのオブジェクトを単一の.tarアーカイブに追加する必要があります。もちろん、各ファイル/ディレクトリは.tarファイル内のフル相対パス(デフォルトディレクトリの)を維持する必要があります。
では、次のような結果があるとしましょう。
myHome
|-- normalDir1 // older than 7 days
| |-- blah.txt
| |-- to_be_excluded_nmw.txt // should never be included anyways
| `-- poems.txt
|-- normalDir2 // created yesterday
| |-- blah2.txt /*
| |-- whatever2.txt * Since it's a normal directory,
| |-- whatever3.txt * I want to exclude these files from .tar
| `-- poems2.txt */
|-- exceptionDirectory1 // older than 7 days
| |-- actions // older than 7 days
| | `-- power.sh // older than 7 days
| `-- events // older than 7 days
| |-- deploy.php // older than 7 days
| `-- set.php // older than 7 days
|-- exceptionDirectory2 // older than 7 days
| |-- actions2
| | `-- power2.sh // created yesterday
| `-- events2 // older than 7 days
| |-- deploy2.php // created yesterday
| `-- set2.php // older than 7 days
|-- file_to_be_updated.php // created yesterday
`-- file_NOT_to_be_updated.php // older than 7 days
生成された .tar には以下を含める必要があります。
./normalDir2/
./exceptionDirectory2/actions2/power2.sh
./exceptionDirectory2/events2/deploy2.php
./file_to_be_updated.php
私はこのスクリプトを作成しました:
#!/bin/bash
TODAY=`date --rfc-3339=date`
FILENAME=$TODAY-package.tar
find ./require ! -name db_connection.php ! -path ./require -mtime -7 -print | xargs tar cvf `date --rfc-3339=date`-package.tar
find ./img ! -path ./img -mtime -7 -print | xargs tar uvf `date --rfc-3339=date`-package.tar
find ./plugin ! -path ./plugin -mtime -7 -print | xargs tar uvf `date --rfc-3339=date`-package.tar
find . -maxdepth 1 ! -name $TODAY-package.tar.gz ! -path . -mtime -7 -print | xargs tar uvf `date --rfc-3339=date`-package.tar
しかし、次のエラーでほとんどすぐに終了するため、うまくいかないようです。
tar: ./img: Impossibile open: Is a directory
「require」、「img」、「plugin」は、再帰的に処理される3つの特別なディレクトリです。スクリプトに問題がありますか?助けてくれてありがとう。
答え1
.txtの下のファイル名にスペースやその他の特殊文字が含まれると、エラーが発生します./img
。
-print
オプションを使用しないでfind
、代わりに `xargs'に対応するオプションを使用してください-print0
:-0
find ./img ! -path ./img -mtime -7 -print0 | xargs -0 tar uvf `date --rfc-3339=date`-package.tar
答え2
- 代わりに
find ./foo ! -path ./foo
。find -mindepth 1 ./foo
~へ指定されたパスを印刷します。 GNUがある場合は、次のように書くことができます
tar
。--exclude=PATTERN
today="$(date --rfc-3339="date")" last_week="$(date --rfc-3339="date" --date="-7 days")" tar --no-recursion --exclude=db_connection.php --after-date="$last_week" cvf "${today}-package.tar" . tar --after-date="$last_week" uvf "${today}-package.tar" ./require ./img ./plugin
答え3
動作していることを確認するためにすぐに作成しました。
tar cvf --no-recursion --after-date $yourdate $TarFile * */*
tar uvrf --after-date $yourdate $TarFile ./require ./plugin ./img