20231121_150111.jpg
我在文本文件中有一长串文件名,如...(每行一个文件名)。
还有另一个目录列表。这些目录包含文件。
我如何检查并显示列表中的哪些文件不存在于任何目录中?
: 编辑
文件名.txt:
20230326_163243.jpg
20230326_163244.jpg
20230326_163245.jpg
....
使用“ls -1”创建
目录.txt:
./2017/2017_3/DSC_0559.JPG
./2017/2017_3/DSC_0067.JPG
./2017/2017_3/DSC_0195.JPG
....
使用“find ./ > directory.txt”创建
如果我在 bash 中运行脚本
#! /bin/bash -
readarray -td '' missing < <(
export LC_ALL=C
comm -z -23 <(<filenames.txt tr '\n' '\0' | sort -zu) \
<(<directories.txt tr '\n' '\0' |
sort -zu |
find -H -files0-from - -mindepth 1 -maxdepth 1 -printf '%f\0' |
sort -zu
)
)
if (( ${#missing[@]} )); then
printf '%s\n' "Couldn't find:"
printf ' - %s\n' "${missing[@]}"
fi
我看到很多输出:
- 20230716_103851.jpg
- 20230716_103852(0).jpg
- 20230716_103852.jpg
....
我的文件名和目录有误吗?或者我错在哪里?
我有一个文件夹,里面有很多子文件夹和图片。我还有一个文件夹,里面有很多 jpg 文件。大多数 jpg 文件都在子文件夹中,但不是全部。我需要一种方法来显示哪些文件不在子文件夹中
filenames.txt :许多 jpg 文件
directory.txt :包含大多数文件的子文件夹
这要容易得多
zsh
:如果您有文件名列表
filenames.txt
和目录列表directories.txt
:使用
bash
,如果你使用的是较新的 GNU 系统,你可以做一些类似的事情:撇开文件可能在错误目录中的考虑,假设您从仅包含文件名而非路径的列表开始,那么最有效的解决方案是获取您拥有的文件名列表(我会用于
find ... -basename {} \;
此)对其进行排序,对您期望的文件列表进行排序并使用它们进行比较diff
。(抱歉@Marcus Müller - 对每个文件进行新的搜索并不是一个非常经济的解决方案)
假设文件名中没有换行符,这可能就是您所需要的:
假设
yourfiles
包含您的文件名列表并yourdirs
包含您的目录名称列表。