Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 比较具有相同名称的文件_Macos_Bash_For Loop - Fatal编程技术网

Macos 比较具有相同名称的文件

Macos 比较具有相同名称的文件,macos,bash,for-loop,Macos,Bash,For Loop,我创建了一个脚本来比较文件夹中的文件(名为.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 sam

我创建了一个脚本来比较文件夹中的文件(名为.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

对于关联数组,这需要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

您也可以尝试使用
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
find-键入f-name“*.sh”-printf“%f\n”| cut-f1-d.”>jpg.txt
读行时
做
找到-名称“$line.*”-打印
完成
您是在尝试检测同一目录中的同名文件,还是在任何目录中查找它们?例如“/a/b/c/foo.jpg”和“/d/e/foo”我试图在任何目录中查找相同名称的文件。是否可以添加支持以同时检查此文件所在目录的名称(仅一个目录)?例如,如果Desktop/a/test.jpg==Myfiles/a/test.jpg,则应该很好!