1

imapsyncmaildir ファイル名の名前を変更して機能させるためのスクリプトを入手できませんでした。:-/

だから私が必要なのは:

何千ものメールが入ったメール フォルダがあります。これらのメールを新しいサーバーにインポートした後、メールのファイル名はファイル名のUnixタイムスタンプとして作成日を取得しましたが、ファイルの作成日フラグはメールからの正しい受信日です。

1 つのファイルに対する ls -l は次のようになります。

-rw-r--r-- 1 popuser popuser  1350432 2013-03-16 07:22 1363563215.M562903P29332V0000000000000802I0000000000AEA46B_527.my-domain.org,S=1350432:2,S

スクリプトがしなければならないことは次のとおりです。1)ファイルの作成日時を読み取ります(コマンドが見つかりました

stat -c %y filename

これを行います)

2) 日付/時刻を 1) から Unix タイムスタンプに変換する

date -d "2013-03-17 11:19:01.000000000 +0100" "+%s"

3) ファイル名の最初の 10 桁 (間違ったタイムスタンプ) を削除し、代わりに 2) のタイムスタンプを使用します。

4)特定のディレクトリ内のすべてのファイルに対してこれを行います

私はスクリプトの初心者ですがLinux、このスクリプトを手伝ってくれる人はいますか?

ありがとうございました!

4

1 に答える 1

2

でこれをやってみてくださいrename

$ rename -n 's/^\d+/(stat($_))[9]/e' [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*

shellプロンプトから。これは非常に便利です。私が行っているように、修飾子の代わりにコードを入れることができます。テストが有効になったら、(dry-run モード スイッチ) を削除できます。state

-n

警告 これを行うことができる場合とできない場合がある同じ名前の他のツールがあるので、注意してください。

次のコマンドを実行すると ( linux)

$ file $(readlink -f $(type -p rename))

そして、あなたは次のような結果を持っています

.../rename: Perl script, ASCII text executable

以下を含まない:

ELF

次に、これは適切なツールのようです=)

そうでない場合、それをデフォルト(通常はすでにそうです)にするにはDebian、次のような派生物を使用しUbuntuます。

$ sudo update-alternatives --set rename /path/to/rename

/path/to/rename(コマンドのパスに置き換えますperl's rename


このコマンドがない場合は、パッケージ マネージャーを検索してインストールするか、手動で実行します


最後になりましたが、このツールはもともと、Perl の父である Larry Wall によって作成されました。


編集

hereに記載されているように、次のエラーがある場合:

引数リストが長すぎます

次に、find次のように使用します。

find -type f -name '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*' -print0|
    xargs -0 -n1 rename -n 's/^\d+/(stat($_))[9]/e' 

(なし-n1で試してみてください。それも機能するはずです)

于 2013-03-18T00:44:30.960 に答える