尝试使用脚本(grep、for、foreach、find)按扩展名组织文件,但我不知所措。寻求建议

尝试使用脚本(grep、for、foreach、find)按扩展名组织文件,但我不知所措。寻求建议

我想遍历源目录中的所有文件并将它们粘贴到目标目录中。

文件列表示例:

/source/folder/text.txt
/source/folder/document.pdf
/source/folder/that/is/deeper/picture.jpg
/source/folder/picture2.JPG

脚本运行后,我希望目标文件夹看起来像这样:

/dest/folder/txt/text.txt
/dest/folder/pdf/document.pdf
/dest/folder/jpg/picture1.jpg
/dest/folder/jpg/picture2.JPG

我已经知道我可以-exec在的背面链接命令find,但我不认为这是我想要的。

grep可能会有用,但是因为它只有一行,所以我认为编写它会很复杂。

forloop 似乎是最好的方法,但我无论如何也无法弄清楚如何提取文件名。

SOURCE=/my/source/dir/

for f in $SOURCE
do
  echo $f
done

$f 似乎只是目录,并没有列出实际的文件名。

答案1

这是我的脚本:

#!/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

该脚本不会对没有扩展名的文件进行排序

相关内容