我想创建UNIX脚本,它会自动将我的工作目录文件移动到新创建的目录。
示例:在你的目录中你有文件:
001-file.html,
001-file.rb,
002-file.html,
002-file.rb
将2个文件移动到./NewDir/001-file,将另外2个文件移动到./NewDir/002-file
我的问题是,从Unix命令中获取正确的字符串后,我无法将其分配给变量。
这是我的代码:
clear
echo "Starting script"
echo "Dir = "$(pwd)
read -p "Please enter count(max '999') of different file groups:" max_i
read -p "Enter new dir name:" outer_dir_name
for ((i=0; i<=$max_i;i++)) do
a1=$(($i/100))
a2=$((($i-$a1*100)/10))
a3=$(($i-($a2*10)-($a1*100)))
inner_dir_name=$((ls *[$a1][$a2][$a3]* 2>/dev/null | head -n 1 | cut -f1 -d"."))
echo $inner_dir_name
echo "--------------"
done
答案 0 :(得分:1)
一对圆括号足以进行命令替换。
inner_dir_name=$(ls *[$a1][$a2][$a3]* 2>/dev/null | head -n 1 | cut -f1 -d".")
答案 1 :(得分:0)
看起来你正在艰难地进行操作。我可能会做这样的事情,假设文件名中没有空格:
ls | sed 's/\..*$//' | sort -u |
while read prefix
do
mkdir -p $outer_dir_name/$prefix
mv $prefix.* $outer_dir_name/$prefix
done
ls
可以通过以下方式更加精确:
ls [0-9][0-9][0-9]-file.*
如果我担心文件名中的空格和其他奇数字符,我不得不使用更小心的东西:
for file in [0-9][0-9][0-9]-file.*
do
prefix=${file%%.*}
[ -d "$outer_dir_name/$prefix" ] || mkdir -p "$outer_dir_name/$prefix"
mv "$file" "$outer_dir_name/$prefix"
done
这通常会执行更多mv
个命令。