複数のサブフォルダに多数のPDFファイルがあります。/ホーム/ユーザー/オリジナル私は圧縮を使用しましたゴーストスクリプト PDFを書く存在する/ホーム/ユーザー/圧縮。
ゴーストスクリプトファイルの約90%を圧縮するのに効果的ですが、残りのファイルは元のファイルよりも大きくなります。
私の考えではCP /ホーム/ユーザー/圧縮到着/ホーム/ユーザー/オリジナルファイルの上書きただターゲットより小さい項目はスキップし、大きな項目はスキップします。
どんなアイデアがありますか?
ベストアンサー1
find
これを行うには、次のコマンドが機能する必要があります。
cd /home/user/original
find . -type f -exec bash -c 'file="$1"; rsync --max-size=$(stat -c '%s' "$file") "/home/user/compressed/$file" "/home/user/original/$file"' _ {} \;
ソリューションの重要な部分--max-size
はで提供されていますrsync
。rsync
マニュアルから:
--max-size=SIZE
これは、指定されたサイズより大きいファイルを転送しないようにrsyncに指示します。
したがって、このfind
コマンドはターゲットディレクトリ(/home/user/original)で動作し、ファイルのリストを返します。各ファイルに対してコマンドをbash
実行するシェルを作成します。rsync
オプションSIZE
パラメータは、ターゲットファイルでコマンドを実行して--max-size
設定stat
されます。
実際、rsync
処理ロジックは次のようになります。
- このパラメータは、ソースファイルがターゲットファイルより大きい場合にソース
--max-size
ファイルが転送されるのを防ぎます。 - ソースファイルがターゲットファイルより小さい場合、転送は期待どおりに機能します。
このロジックを使用すると、小さいファイルだけがソースディレクトリから宛先ディレクトリに転送されます。
私はこれをいくつかの異なる方法でテストし、期待通りに動作しました。ただし、システムが試す前に、ターゲットディレクトリのバックアップを作成できます。