gpt4 book ai didi

linux - 序列中丢失文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:58 24 4
gpt4 key购买 nike

我正在努力适应 this script使用 .pdf 文件目录。我的文件结构的不同之处在于前导 0 的使用。我的文件都是3位数字---比如

001.pdf
002.pdf
...
045.pdf
046.pdf
...
124.pdf
125.pdf

是否有可能使这项工作成功?

#!/bin/sh
start_number=1
current_number=0
errfound=0
errfiles=""


for file in $(ls); do
current_number="${start_number}"
file_error=0
while read line; do
if [ ! "${line}" = "${current_number}" ]; then
echo "Missing number: ${current_number}"
file_error=1
fi
done < $file
if [ "${file_error}" -ne 0 ]; then
errfiles="${errfiles}${file} "
fi
done
if [ ! -z "${errfiles}" ]; then
echo "The following files are missing numbers:"
echo "${errfiles}"
fi
exit 0

最佳答案

如果您想从文件中读取文件名并报告该列表中任何缺失的名称:

 awk '{ name = sprintf("%03d.pdf", ++n) }
{ while ($0 != name) {
printf("Missing file %s\n", name)
name = sprintf("%03d.pdf", ++n)
} }' <file

给定文件

001.pdf
002.pdf
005.pdf
007.pdf
008.pdf

这会产生

Missing file 003.pdf
Missing file 004.pdf
Missing file 006.pdf

假设您想要在 bash 的序列中查找丢失的文件 ,其中每个文件名都应与模式 <3 zero-filled digits>.pdf 匹配以及数字应介于 001 之间的位置和 125 :

for name in {001..125}.pdf
if [ ! -f "$name" ]; then
printf 'file "%s" is missing\n' "$name" >&2
fi
done

或使用 /bin/sh :

i=1
while [ "$i" -le 125 ]; do
name=$( printf '%03d.pdf' "$i" )
if [ ! -f "$name" ]; then
printf 'file "%s" is missing\n' "$name" >&2
fi
i=$(( i + 1 ))
done

这与 i 迭代取值从 1 到 125。预期的文件名是使用 printf 创建的和格式规范 %03d.pdf . %03d是一个值的占位符,该值将被转换为“用零填充的 3 位十进制整数”($i 将用于此值)。

如果预期的文件名不作为常规文件存在,则会向标准错误打印一条消息。

使用 ksh93 :

for name in {1..125%03d}.pdf
if [ ! -f "$name" ]; then
printf 'file "%s" is missing\n' "$name" >&2
fi
done

关于linux - 序列中丢失文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50345662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com