Похоже, вам просто нужен простой Makefile, который знает, как сделать PDF из TeX:
all: $(patsubst %.tex,%.pdf,$(wildcard *.tex))
%.pdf: %.tex
latexmk -pdfxe $<
.PHONY: all
.DELETE_ON_ERROR:
Кажется, должен быть инструмент, который делает это по умолчанию, но я не помню, есть ли он.
Вы можете запрашивать экстенты файлов с помощьюfilefrag
(универсального, FIEMAP ioctl )или с помощьюxfs_bmap
(специфичного для XFS ). Таким образом, вы можете выбрать подсчет общих экстентов (дубликатов )только один раз (или вообще не подсчитывать ).
# filefrag -e -k testfile
Filesystem type is: 58465342
File size of testfile is 5242880 (5120 blocks of 1024 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 5119: 96.. 5215: 5120: last,shared,eof
testfile: 1 extent found
В этом примере filefrag
знает и показывает, что экстент является общим (в любом месте файловой системы, не обязательно в этом каталоге ),xfs_bmap
нет:
# xfs_bmap -l testfile
testfile:
0: [0..10239]: 192..10431 10240 blocks
Но, по сути, это ключевой ингредиент, который вы можете использовать для самостоятельного написания сценария.
Показать все возможные общие экстенты:
# find. -xdev -type f -exec filefrag -e -k {} + | grep shared
0: 0.. 5119: 96.. 5215: 5120: last,shared,eof
0: 0.. 5119: 5216.. 10335: 5120: last,shared,eof
0: 0.. 5119: 96.. 5215: 5120: last,shared,eof
Общий (дубликат в каталоге )экстентов с использованиемxfs_bmap
:
# find. -xdev -type f -exec xfs_bmap -l {} + | grep 'blocks$' | grep -v ': hole' | sort | uniq -d
0: [0..10239]: 192..10431 10240 blocks
Обратите внимание, что xfs_bmap
использует 512 байт на блок, тогда как filefrag
использует 1024 байта (с параметром -k
)или другим размером блока файловой системы (, например 4096 байт ).
Совместно используемые дубликаты экстентов с использованиемfilefrag
:
# find. -xdev -type f -exec filefrag -ek {} + | grep shared | sort | uniq -d
0: 0.. 5119: 96.. 5215: 5120: last,shared,eof
Таким образом, в этом случае вам придется вычесть 5120 из результата du -cks.
.