bash
スクリプトを実行しようとすると、Xより古いファイルが圧縮され、圧縮後に圧縮解除されたバージョンは削除されます。このようなことを試してみましたが、うまくいきません。デフォルトではXより古いファイルを圧縮して古いファイルを削除した文
find /home/randomcat -mtime +11 -exec gzip {}\ | -exec rm;
bash
スクリプトを実行しようとすると、Xより古いファイルが圧縮され、圧縮後に圧縮解除されたバージョンは削除されます。このようなことを試してみましたが、うまくいきません。デフォルトではXより古いファイルを圧縮して古いファイルを削除した文
find /home/randomcat -mtime +11 -exec gzip {}\ | -exec rm;
(それが圧縮された変種でそれを置き換えるため)、gzip
は圧縮されていないファイルを削除します。そして、あなたは普通のファイル(シンボリックリンクではなく、ディレクトリやデバイスではありません)以外のもので動作させたくありません。
だから、あなたもfind(1)がいくつかのハードリンクを持つファイルを避けるためにしたいこと、少なくとも
find /home/randomcat -mtime +11 -type f -exec gzip {} \;
をしたいです。また、コマンドを実行する前に尋ねることもできます。 -exec
または-ok
とfind
コマンドはセミコロン(または+
記号)を望んでいる
find /home/randomcat -mtime +11 -type f -links 1 -ok gzip {} \;
、あなたはあなたのshellから;
をセミコロンescapeする必要があります。そして、あなたは試みることができます。あなたは+
find
コマンドを使用する場合は、(単一gzip
プロセスへの)グループいくつかの引数は、とても少ないのプロセスを実行するだろうquoteへ3210代わりの\;
それ...
を使用することができます(しかし、彼らは長く続くだろう)。だから、あなたがglobbingとどのようにシェルworksの詳細を読むことをお勧めします
find /home/randomcat -mtime +11 -type f -links 1 -exec gzip -v {} +
を試みることができます。
ところで、あなたはcommand pipeline(あなたの質問では|
の間違った使用によって示唆されているように)は必要ありません。
GNU parallelを使用して並列処理を実行したり、バックグラウンドジョブを使っていくつかのシェルにフィードを送ったりすることもできます。
find /home/randomcat -mtime +11 -type f -links 1 \
-exec printf "gzip %s &\n" {} \; | bash -x
実際には処理速度が向上しません。
私はそれをチェックし、ファイルは圧縮されますが、圧縮されていないバージョンはまだ存在します。 -exec rm; '? – harcotlupus
あなたは本当に確信しています、私は示唆しているコマンドを試しているときにこの動作を観察していません。必要に応じてセミコロンから脱出しましたか? –
そしてあなたのコマンドから '|'を削除してください。違います。私の提案では '|'を使用しないことに注意してください。 –
find /home/randomcat -mtime +11 -exec gzip {} +
このbashスクリプトは、あなたがgzip形式で新しいファイルを作成する「コマンドを見つける」.Insteadで見つけたファイルを圧縮format.Let年代をgzip圧縮するファイルは、あなたがXよりも古いという3つのファイルを持っていると言う変換し、彼らの名前はa、b、cです。 find/home/randomcat -mtime +11 -exec gzip {} +コマンドを実行した後、 では、/ home/randomcatディレクトリにbcが表示される代わりに、a.gz b.gz c.gzが表示されます。
私はそれについては分かりません。'find'はセミコロンを必要とし、シェルによって処理されないようにエスケープする必要があります。 –
あなたは正しい、間違いだった。 "find/home/randomcat -mtime +11 -exec gzip {} \;"/home/randomcat -mtime +11 -exec gzip {} + "を使用しなければなりません – dburcu
あなたは答えを編集する必要があります(または削除してください)。 –
ここで質問する前に、コマンドのドキュメントをお読みください。あなたのコンピュータで 'man find'と' man gzip'を試してみてください。 –
'|'はあなたのコマンドで間違っています –