【问题标题】:Compare files with the same name比较同名文件
【发布时间】:2013-11-24 12:01:59
【问题描述】:

我创建了脚本来比较文件夹中的文件(名称为 .jpg,但没有它但名称相同)。脚本在一个目录中搜索文件的问题,而不是在子目录中!我该如何解决?

for f in *
do
  for n in *.jpg
do
tempfile="${n##*/}"
    echo "Processing"
echo "${tempfile%.*}"
echo "$f"
  if [[ "${tempfile%.*}" = $f ]]
then
  echo "This files have the same name!"
//do something here
else
echo "No files"
  fi
done
done

【问题讨论】:

  • 您是想检测同一目录中的同名文件,还是想在任何目录中找到它们?前任。 “./a/b/c/foo.jpg”和“./d/e/foo”
  • 我正在尝试在任何目录中查找同名文件

标签: macos bash for-loop


【解决方案1】:

这需要 bash 版本 4 用于关联数组。

shopt -s globstar nullglob extglob
declare -A jpgs

for jpg in **/*.jpg; do 
    name=$(basename "${jpg%.jpg}")
    jpgs["$name"]=$jpg
done

for f in **/!(*.jpg); do 
    name=$(basename "$f")
    if [[ -n ${jpgs["$name"]} ]]; then 
        echo "$f has the same name as ${jpgs["$name"]}"
    fi
done

【讨论】:

  • 是否可以添加支持同时检查该文件所在目录的名称(仅一个目录)?例如,如果 Desktop/a/test.jpg == Myfiles/a/test. jpg 那应该就好了!
【解决方案2】:

您也可以尝试使用find

find . -type f -name "*.sh" -printf "%f\n" | cut -f1 -d '.' > jpg.txt

while read line
do
  find . -name "$line.*" -print
done < jpg.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多