這需要照顧的碰撞由重名的重命名爲預編號的名稱。該功能不是嚴格需要的。
這種方法可能會失敗的空間或製表符,或更糟糕的文件名。 (但是將空格和製表符放入名稱的人應該會失去......)
#!/bin/sh
DIRS="dir1 dir2 dir3 dir4"
TARGET=$HOME/txt
move_one()
{
p=$1 # Full pathname
t=$2 # Target directory
i=$3 # Inode number from sourcefile
d=`dirname $p`
b=`basename $p`
#echo "p=$p"
#echo "d=$d" # the path-prefix from the source file
#echo "b=$b" # The name part of the source file
#echo "t=$t"
#echo "i=$i"
# After checking, remove the echo below for more fun
echo mv -i $p $t/$i$b
}
# inodenumber+name
find $DIRS -name \*txt -type f -ls | awk '{print $1," ",$11}' | (
while read i p; do
# echo "i=$i"
# echo "p=$p"
move_one $p $TARGET $i
done
)
#eof
我認爲這是不可能的。你的目標文件夾中有同名的文件,它們將被覆蓋。你可以使用unix工具'find'來查找名爲'file.txt'的所有文件,並用'mv'將它們移動到目標文件夾。但是你必須重命名文件。例如file1.txt,file2.txt ... – hofmeister 2012-07-18 12:54:54