我在目录列表中遇到问题。我想制作脚本,它将循环通过目录中的dirs和文件,以便我可以将它们移动到别处。
我的问题是我需要排序文件夹中的所有文件。有2000个目录,我需要遍历它们然后循环遍历这些目录中的所有文件,并在目录中按扩展名对它们进行排序(或者将移动文件),它的名称将会是那个特定的扩展
有人可以帮忙吗?
#!/bin/bash
tar_fol="$HOME/Desktop/try/"
to_fol="$HOME/Desktop/SortedFiles/"
for DIRE in "$(ls -d $tar_fol"*")"
do
echo "Checking dir : $DIRE"
for FIL in "$(ls -p $tar_fol$DIRE)"
do
echo "Checking file : $FIL"
if [ "$(find ~/Desktop/ -type d -name ${FIL##*.})" != "" ]
then
mv -f $tar_fol$FIL $to_fol${FIL##*.}
else
mkdir $to_fol${FIL##*.}
mv $tar_fol$FIL $to_fol${FIL##*.}
fi
done
done
答案 0 :(得分:2)
您正在引用通配符,因此您要查找名称字面以字符*
结尾的文件。
无论如何,you should not use ls
to drive loops,还应该避免使用大写字母作为私有变量。
#!/bin/bash
tar_fol="$HOME/Desktop/try/"
to_fol="$HOME/Desktop/SortedFiles/"
for dire in "$tar_fol"/*/.
do
echo "Checking dir: '$dire'"
for fil in "$dire"/*
do
echo "Checking file: '$fil'"
find ~/Desktop/ -type d -name "${fil##*.}" -exec sh -c 'mkdir -p "$0";
mv "$@" "$0"' "$to_fol" "$fil" {} \+
done
done
我不确定我究竟究竟最内层循环应该完成什么,因此有一些猜测。一般的想法是将$0
中的目标目录(隐藏的黑客,但它相当常见)和找到的文件传递给-exec
脚本。
答案 1 :(得分:0)
您可以使用ls
命令
cd $HOME/Desktop/try/
ls -laRX
OR
ls -laRX $HOME/Desktop/try/
-l use a long listing format
-a, --all do not ignore entries starting with .
-R, --recursive
list subdirectories recursively
-X sort alphabetically by entry extension
有关详细信息,请参阅man ls