移动目录中的所有文件,忽略文件扩展名

移动目录中的所有文件,忽略文件扩展名

我有一个目录,其中包含不同文件类型(svg、png、jpeg、jpg 和 gif)的多个图像,我还有一个 txt 文件,其中包含许多图像名称,但没有文件扩展名,例如:

1664
2048
3m
5asec
6play
7_eleven
7_up
aba_pagum
abc
abouelafia
absolut
accor_hotels
acdc
ace
acer
actimel

我想循环遍历文件并在目录中找到不带扩展名的图像并将其移动到新文件夹。例如:

1664 -> move 1664.svg to the new folder
2048 -> move 2048.gif to the new folder

等等..

我想到的是这个:(move.sh)

# Create a directory
mkdir 01_img_exists

# Read text file with image names
cat image_names.txt | while read i; do
    # Move images to folder
   mv ./${i} ./01_img_exists
done

我怎样才能移动文件而不考虑扩展名?

答案1

你很接近了。

mkdir -p 01_img_exists

while read i
  do
    echo mv ./"$i."* ./01_img_exists/
  done < image_names.txt

尝试上述操作,然后echo在对结果满意时移除以进行实际移动。

  • mkdir -p如果目录不存在则创建该目录。
  • "$i."*将匹配image_names.txt文件中的所有名称以及第一个名称之后的任何内容.,即任何扩展名。
  • < image_names.txt指定要读取的输入文件。

您可以省略前导./,它仍能正常工作。

注意:

单个命令中作为参数传递的文件数量是有限制的mv。此限制称为ARG_MAX。您遇到此限制的可能性很小。但是,考虑到每个文件名的扩展名数量有限,这种情况不太可能发生在您的情况下。如果您碰巧遇到该限制,请尝试下面的代码。

mkdir -p 01_img_exists

while read i
  do
  for f in "$i."*
    do
      echo mv "$f" 01_img_exists/
    done
  done < image_names.txt

相关内容