遍历当前路径下目录并移动文件到当前目录下的tmp目录中脚本(处理了文件名空格)
使用场景
在我的某个目录下,有许多的文件和文件夹,我希望将这个目录下所有文件及所有子文件夹下的文件,移动到指定的一个目录下,同时,使用子文件夹的路径作为新文件名的前缀,以--作为分隔符。
简单点说,就是消除目录层级
此shell脚本考虑了文件名中包含空格的情况,当然,也不存在文件名冲突的问题。
脚本如下
#!/bin/bash
#set -e #"Exit immediately if a simple command exits with a non-zero status."
#set +e # don’t bail out of bash script if cache doesn’t exist
#将当前目录下所有子目录中的所有文件移动到当前目录下的tmp目录中
#即消除目录层级
old_dir=`pwd`
cd `dirname $0`
mkdir tmp_pic
curr_dir=`pwd`
function getdir(){
for element in `ls $1 | tr " " "\?"`
do
my_element=`echo $element | tr "\?" " "`
dir_or_file="$1/$my_element"
if [[ "${dir_or_file}" =~ ^.*tmp_pic$ || "${dir_or_file}" =~ ^.*sh$ ]];then
continue
fi
if [ -d "$dir_or_file" ]
then
getdir $dir_or_file
else
#echo $dir_or_file
base_name=`basename "$dir_or_file"`
#parent_name=`dirname "$dir_or_file"`
#parent_base_name=`basename "$parent_name"`
curr_dir_len=${#curr_dir}
let curr_dir_len++
parent_base_name=${dir_or_file:$curr_dir_len}
parent_base_name=`dirname "/${parent_base_name}"`
parent_base_name=${parent_base_name:1}
parent_base_name=${parent_base_name////--}
to_file_name="$curr_dir/tmp_pic/$parent_base_name--$base_name"
echo "$dir_or_file" "$to_file_name"
cp "$dir_or_file" "$to_file_name"
#mv "$dir_or_file" "$to_file_name"
fi
done
}
root_dir=`pwd`
getdir $root_dir
cd ${old_dir}