Linux:递归查找所有没有匹配 .tif 的 .txt 文件
Linux: Recursively find all .txt files that don't have a matching .tif
我正在使用 Debian Linux。我是新手。我会尽量用我知道的最简单的方式提问。
我的驱动器上有一个非常深的目录树,其中包含数千个 .tif 文件和 .txt 文件。我想递归地查找(列出)所有 没有 具有匹配的 .tif 文件(基本名称)的 .txt 文件。 .tif 文件和 .txt 文件也位于整个树的不同目录中。
简单的形式看起来像这样...
目录 1:hf-770.tif、hf-771.tif、hf-772.tif
目录 2:hf-770.txt、hf-771.txt、hf-771.txt、hr-001.txt、tb-789.txt
我需要找到(列出)hr-001.txt 和 tb-789.txt,因为它们没有匹配的 .tif 文件。同样,目录树非常深,贯穿多个子目录。
我研究并试验了以下命令的变体,但似乎无法使其工作。非常感谢。
find -name "*.tif" -name "*.txt" | ls -1 | sed 's/\([^.]*\).*//' | uniq
您可以为此编写 shell 脚本:
#!/bin/bash
set -ue
while IFS= read -r -d '' txt
do
tif=$(basename "$txt" | sed s/\.txt$/.tif/)
found=$(find . -name "$tif")
if [ -z "$found" ]
then
echo "$txt has no tif"
fi
done < <(find . -name \*.txt -print0)
这对它在当前目录或以下目录中找到的所有 .txt
文件进行循环。对于每个找到的文件,它将 .txt
扩展名替换为 .tif
,然后尝试查找该文件。如果找不到它(返回的文本为空),它会打印 .txt
文件名。
robert@saaz:$ tree
.
├── bar
│ └── a.txt
├── foo
│ ├── a.tif
│ ├── b.tif
│ ├── c.tif
│ └── d.txt
└── txt-without-tif
2 directories, 6 files
robert@saaz:$ bash txt-without-tif
./foo/d.txt has no tif
我正在使用 Debian Linux。我是新手。我会尽量用我知道的最简单的方式提问。
我的驱动器上有一个非常深的目录树,其中包含数千个 .tif 文件和 .txt 文件。我想递归地查找(列出)所有 没有 具有匹配的 .tif 文件(基本名称)的 .txt 文件。 .tif 文件和 .txt 文件也位于整个树的不同目录中。
简单的形式看起来像这样...
目录 1:hf-770.tif、hf-771.tif、hf-772.tif
目录 2:hf-770.txt、hf-771.txt、hf-771.txt、hr-001.txt、tb-789.txt
我需要找到(列出)hr-001.txt 和 tb-789.txt,因为它们没有匹配的 .tif 文件。同样,目录树非常深,贯穿多个子目录。
我研究并试验了以下命令的变体,但似乎无法使其工作。非常感谢。
find -name "*.tif" -name "*.txt" | ls -1 | sed 's/\([^.]*\).*//' | uniq
您可以为此编写 shell 脚本:
#!/bin/bash
set -ue
while IFS= read -r -d '' txt
do
tif=$(basename "$txt" | sed s/\.txt$/.tif/)
found=$(find . -name "$tif")
if [ -z "$found" ]
then
echo "$txt has no tif"
fi
done < <(find . -name \*.txt -print0)
这对它在当前目录或以下目录中找到的所有 .txt
文件进行循环。对于每个找到的文件,它将 .txt
扩展名替换为 .tif
,然后尝试查找该文件。如果找不到它(返回的文本为空),它会打印 .txt
文件名。
robert@saaz:$ tree
.
├── bar
│ └── a.txt
├── foo
│ ├── a.tif
│ ├── b.tif
│ ├── c.tif
│ └── d.txt
└── txt-without-tif
2 directories, 6 files
robert@saaz:$ bash txt-without-tif
./foo/d.txt has no tif