自定义unix命令组合分配给变量

时间:2014-06-08 15:46:52

标签: bash unix

我想创建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

2 个答案:

答案 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个命令。

相关问题