У меня есть каталог с несколькими изображениями в разных типах файлов (SVG, PNG, JPEG, JPG и GIF), у меня также есть файл TXT, который содержит много имен изображений, но без расширения файла EX:
1664
2048
3m
5asec
6play
7_eleven
7_up
aba_pagum
abc
abouelafia
absolut
accor_hotels
acdc
ace
acer
actimel
Я хочу лосить Pharogh файл и находить изображение в каталоге без расширения и переместить его в новую папку. Для бывшего:
1664 -> move 1664.svg to the new folder
2048 -> move 2048.gif to the new folder
И так далее ..
Что мне удалось придумать, это: (moving.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
Как я могу переместить файлы, игнорируя расширение?
, Вы очень близки.
mkdir -p 01_img_exists
while read i
do
echo mv ./"$i."* ./01_img_exists/
done < image_names.txt
Попробуйте выполнить указанные выше действия, а затем удалите эхо
, если он удовлетворен результатами, чтобы выполнить фактическое перемещение.
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