shell 搜索匹配ID的图像,然后使用终端将匹配的图像复制到MacOS上的新目录

q3qa4bjr  于 2023-01-26  发布在  Shell
关注(0)|答案(1)|浏览(109)

我有以下文件和文件夹:
./图像./新图像./ids.txt
在./images中,我有很多图片,例如12345.jpg在./ids.text中,我有一个每行一个的id列表,如下所示:
12345 67890 abc德fghijk等
我尝试在终端中运行代码,检查ids.txt中的ID,然后如果它将ID与图像I ./images匹配,则将匹配的图像复制到./new_images。
下面是我的代码:

img_dir=./images
new_img_dir=./new_images

if [ ! -d $new_img_dir ]
then
    mkdir $new_img_dir
    chmod -R 755 $new_img_dir
fi

while IFS= read -r id; do
    find $img_dir -maxdepth 1 -iname "$id.*" -print -exec cp -v {} $new_img_dir \;
    if [ $? -eq 0 ]; then
        echo "ID: $id"
        echo "Match found and copied to $new_img_dir"
    else
        echo "No match found for ID: $id"
    fi
done < "ids.txt"

我得到的回应是:
ID:12345找到匹配项并复制到./new_images
但映像永远不会复制到./new_images
有谁能帮我看看我的代码,看看我做错了什么吗?
非常感谢。

um6iljoc

um6iljoc1#

这应该行得通:

#!/usr/bin/env sh

# Fail on error
set -o errexit

# ================
# CONFIGURATION
# ================
ID_FILE="ids.txt"
IMG_DIR="images"
IMG_NEW_DIR="new_images"

# ================
# LOGGER
# ================
# Fatal log message
fatal() {
  printf '[FATAL] %s\n' "$@" >&2
  exit 1
}

# Warning log message
warn() {
  printf '[WARN ] %s\n' "$@" >&2
}

# Info log message
info() {
  printf '[INFO ] %s\n' "$@"
}

# ================
# MAIN
# ================
{
  # Create directory if not exists
  [ -d "$IMG_NEW_DIR" ] || {
    info "Creating directory '$IMG_NEW_DIR'"
    mkdir "$IMG_NEW_DIR"
  }

  # Read id(s)
  while IFS='' read -r image_id; do
    # Search images
    images=$(
      find "$IMG_DIR" \
        -maxdepth 1 \
        -mindepth 1 \
        -type f \
        -iname "$image_id.*" \
        -print \
        -exec cp "{}" "$IMG_NEW_DIR" \;
    ) || fatal "Unknown 'find' error"

    if [ -z "$images" ]; then
      warn "No match for ID '$image_id'"
    else
      info "Match for ID '$image_id'"
    fi
  done < "$ID_FILE"

  # Change permissions
  info "Changing permissions '$IMG_NEW_DIR'"
  chmod -R 755 "$IMG_NEW_DIR"
}

相关问题