【发布时间】:2014-11-28 00:47:31
【问题描述】:
我正在尝试创建一个小型 bash 脚本,该脚本实质上是查看包含数百个子目录的目录。在其中一些子目录中包括一个 textfile.txt 和一个 htmlfile.html,其中名称 textfile 和 htmlfile 是可变的。
我只关心同时具有.txt和.html的子目录,其他所有子目录都可以忽略。
然后我想列出同一子目录中的所有 .html 文件和 .txt 文件
这似乎是一个很容易解决的问题,但我不知所措。我能真正开始工作的是一行代码,它输出具有 .html 文件或 .txt 的子目录,与它们所在的实际子目录没有关联,而且我在 bash 脚本方面很新,所以我不能继续前进
#!/bin/bash
files="$(find ~/file/ -type f -name '*.txt' -or -name '*.html')"
for file in $files
do
echo $file
done
【问题讨论】:
-
发布你目前所拥有的。
-
以上更新,谢谢
-
我觉得应该有一种方法可以通过 find 本身来做到这一点,但我正在努力思考目前可能是什么。这意味着我得到的最佳答案(我目前没有时间写出来)将涉及使用
-type f \( -name -o -name \) -printf '%h\n',然后将其传递给 awk/sort+uniq -c 以查找超过一个输出条目。 -
@EtanReisner 完全正确!并使用
uniq -d仅获取重复的条目,例如只有两个文件都在哪里。将结果传送到xargs find ...以列出所有文件... -
@jm666 您可以有一个包含多个 *.html 文件但没有 *.txt 文件的目录,反之亦然。如果你只打印目录名,你会在这两种情况下得到重复的行,你最终会得到错误的匹配。