我正在寻找比较 Drupal 主题的目录。 drupal 主题是一个由多个文件组成的目录,我试图找出哪些是必不可少的。例如,它们可能都有一个名为template.php
或 的文件page.tpl.php
。
如何找到多个目录的所有公共文件集?就我而言,所有“相同”文件(同名的文件)都将位于同一级别目录中。
答案1
列出所有目录共有的文件的所有名称(不是路径)。
dirs=( "A dir" "B dir" "C dir" "D dir" )
find "${dirs[@]}" -maxdepth 1 -type f -name "*" -printf '%f\n' |
sort | uniq -c | sed -n "s/^ *${#dirs[@]} //p"
或者将其作为脚本文件或函数调用,并以目录作为参数。
find "$@" -maxdepth 1 -type f -name "*" -printf '%f\n' |
sort | uniq -c | sed -n "s/^ *$# //p"
答案2
您可以显示按名称出现的目录数排序的名称列表。
find */ | # traverse all the template directories
sort -t / -k 2 | # sort, ignoring the first field
tr '/' '\t' | # turn / into tabs
uniq -f 1 -c | # count duplicates, ignoring the first field
tr '\t' '/' | # turn tabs back into /
sort -t / -s -k 1n # sort by the number of occurrences
答案3
和梅尔德您可以比较两个目录,并查看其中一个目录中存在哪些文件,另一个目录中不存在哪些文件,反之亦然。它还可以显示常见文件之间的差异。
答案4
对于 3 个目录,其中一个是当前目录,以及两个“a”和“b”,您可以像这样链接测试:
ls a/$(ls b/$(ls *.php) 2>/dev/null) 2>/dev/null
如果文件具有通用模式(如 .php)并且文件名中不包含空格。
在脚本中使用ls
总是有问题的,我通常不鼓励使用它,但是如果您对搜索开始的目录中的所有文件有一个概述,并且它不包含空格,也不包含像“*”或“?”这样的特殊字符。 "、"<"或"|",需要保存才能使用。