Вы можете использовать такой скрипт:
for i in `find. -type f -name "*.txt"`
do
newfile=$(echo $i|sed -s 's@/@_@g'|cut -c -3)
mv "$i" "dest/$newfile"
done
Если количество файлов очень велико, вы можете попробовать while
вместоfor
while read i
do
newfile=$(echo $i|sed -s 's@/@_@g'|cut -c -3)
mv "$i" "dest/$newfile"
done < (find. -type f -name "*.txt")
П.С. Будьте осторожны с именами файлов/каталогов с нестандартными символами в именах файлов. Для справки проверьте этот вопрос и ответы