分割を使用したスクリプト [閉じる]

分割を使用したスクリプト [閉じる]

1,000KBを超えるディレクトリにPDFファイルのみを分割するシェルスクリプトを作成するにはどうすればよいですか? pdftkや他のダウンロード可能なツールを使用しない

PDFをバイト単位で分割したいです。私がダウンロード可能なツールを使用することに反対する理由は、同僚がいかなる種類のダウンロードも許可しないことを明らかにしたからです。

答え1

mkdir split-files
find . -maxdepth 1 -type f -size +10000000c -exec split -b 10000000 {} split-files/{}. ';'

現在のディレクトリで、10000000バイト(1000KB)より大きいファイルを見つけます。各部分が1000KBを超えないように、これらのファイルを分割します。分割はバイト境界で発生します。

split-files分割ファイルは、元のファイルと同じ名前と2文字のサフィックスを追加して新しいディレクトリに保存されます。

元のファイルは変更されていません。

答え2

次のコマンドは、現在のディレクトリで1000 KB()を超えるすべてのファイルを検索します.

find . -type f -size +1000k

|結果を各ファイルに送信し、次のより大きいすべてのファイルを一覧表示するなどのxargsコマンドを実行できます。
1000KB

find . -type f -size +1000k | xargs ls -l

コマンドを実行するには、split上記のコマンドをユーザーのコマンドに置き換える必要があります。ls -lssplit

答え3

分割コマンドを使用して複数の部分に分割します。これにより、ソースファイルで選択した寸法で部品が作成されます。

split --bytes=1000K MyBigFile.jpg filepart

次の部分はあなたの名前で始まるランダムな名前になります。

このファイルは次のとおりです。

filepartazza
filepartczaa
filepartqqzs

次のように簡単に組み合わせることができます。

cat filepart* >NewBigPicture.png

私はディレクトリ内のすべてのファイルを検索してサブディレクトリに分割する完全なスクリプトを作成しました。

スクリプトのパラメータ:「ファイルを含むフォルダ」「K単位の一致するサイズ」「サブディレクトリとセクションの名前」

呼ぶ:./script.sh "/media/exchange/" "1000" "Parts"

#!/bin/bash

SplitFiles() {

    File=""
    PartFolder=""
    IFS=$'\n'

        for File in `ls -lh --block-size=K $Folder | grep -v /`
        do
            Filename=$(echo $File | awk '{ print $1="";$2="";$3="";$4="";$5="";$6="";$7="";$8=""; print $0 }')
            Filename=$(echo $Filename | awk '{$1=$1};1')
            Filezise=$(echo $File | awk '{ print $5 }' | tr -d K)

            if [[ -z "$Filezise" || "$Filezise" -lt "$MatchSize" ]]; then
                :
            else
                PartFolder="$Folder""$Partname""Folder"
                mkdir -p "$PartFolder"
                split --bytes=1000K $Folder$Filename $PartFolder/$Partname                                                      
            fi
        done    
}

Folder="$1"
MatchSize="$2"
Partname="$3"

SplitFiles "$Folder" "$MatchSize" "$Partname"

サブディレクトリを作成し/media/exchange/Parts、その中にすべての部品を保存します。

関連情報