如何编写一个 shell 脚本来仅分割目录中大于 1,000KB 的 PDF 文件? 不使用 pdftk 或任何其他可下载工具
我希望按字节分割 PDF,同样,我反对使用可下载工具的原因也是因为我的同事已经明确表示我们不允许下载任何类型的工具。
答案1
mkdir split-files
find . -maxdepth 1 -type f -size +10000000c -exec split -b 10000000 {} split-files/{}. ';'
这将查找当前目录中大小超过 10000000 字节 (1000 KB) 的文件。它将分割这些文件,使每个部分不超过 1000 KB。分割发生在字节边界上。
分割后的文件将保存在新目录中split-files
,并且与原始文件同名,并带有两个字母后缀。
原始文件保持不变。
答案2
以下命令将查找当前目录中每个大于 1000KB 的文件(.
):
find . -type f -size +1000k
您可以|
将结果发送xargs
到每个文件并执行命令
,例如列出大于的每个文件1000KB
:
find . -type f -size +1000k | xargs ls -l
为了执行您的命令,您应该将上面的命令split
替换为您的命令。ls -ls
split
答案3
使用 split 命令将其分成几部分。这将创建具有您从源文件中选择的尺寸的零件:
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
并将所有部分存储在其中。