Этот вопрос уже задан ответ здесь:
Я хочу перебрать все файлы в исходном каталоге и вставить их в целевой каталог.
Пример списка файлов:
/source/folder/text.txt
/source/folder/document.pdf
/source/folder/that/is/deeper/picture.jpg
/source/folder/picture2.JPG
После запуска сценария я бы хотел, чтобы папка dest выглядела так:
/dest/folder/txt/text.txt
/dest/folder/pdf/document.pdf
/dest/folder/jpg/picture1.jpg
/dest/folder/jpg/picture2.JPG
Я узнал, что могу связать команды -exec
на обратной стороне из найти
, но я не думаю, что это то, что мне нужно.
grep
может быть полезным, но поскольку это однострочный текст, я думаю, что его написание будет сложным.
Forloop кажется лучшим способом, но я не могу понять, как извлечь имя файла.
SOURCE=/my/source/dir/
for f in $SOURCE
do
echo $f
done
$ f представляет собой только каталог и не отображает фактическое имя файла.
вот мой скрипт:
#!/bin/bash
#this script sorts files according to their extensions
oldIFS=$IFS
IFS= этот скрипт не будет сортировать файлы без расширения
\n'
(find . -type f) > /tmp/temp
for var in `cat /tmp/temp`
do
name=`basename "$var"` ext=`echo $name | cut -d'.' -f2- | cut -d'.' -f2- | cut -d'.' -f2- | cut -d'.' -f2- | cut -d'.' -f2- | cut -d'.' -f2- | cut -d'.' -f2-`
mkdir -p $ext
mv "$var" $ext/ 2> /dev/null
done
IFS=$oldIFS
этот скрипт не будет сортировать файлы без расширения