我想遍历源目录中的所有文件并将它们粘贴到目标目录中。
文件列表示例:
/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
该脚本不会对没有扩展名的文件进行排序