![在 UNIX 中将文件移动到文件夹](https://linux22.com/image/1337429/%E5%9C%A8%20UNIX%20%E4%B8%AD%E5%B0%86%E6%96%87%E4%BB%B6%E7%A7%BB%E5%8A%A8%E5%88%B0%E6%96%87%E4%BB%B6%E5%A4%B9.png)
我有许多文件,从 b_in00 到 b_in79,我需要将这些文件移动到文件夹 00 到 79,其中 b_in00 进入文件夹 00,依此类推。您能指导我吗?
答案1
在bash中:
mkdir {0,1,2,3,4,5,6,7}{0,1,2,3,4,5,6,7,8,9} 80
for i in `seq -w 0 80`; do mv b_in${i} $i; done
-w 表示向左填充,使 1 变成 01
或者:
mkdir {00..80}
for i in {00..80}; do mv b_in$i $i; done
甚至
for i in {00..80}; do mkdir $i; mv b_$i $i;done
答案2
有很多方法可以做到这一点。就我个人而言,我会使用 shell 脚本。
在 Bash 中它看起来像这样:
i=0
while [[ $i -le 80 ]]
do number=$(printf %02i $i)
mkdir $number &&
mv b_in$number $number
i=$((i+1))
done
或单行版本
i=0; while [[ $i -le 80 ]]; do number=$(printf %02i $i); mkdir $number && mv b_in $number; i=$((i+1)); done
另一种方法是获取所有文件,去掉前导 b_in 并使用剩余的字符串作为目录名称:
for filename in b_in*
do
dirname=${filename#b_in}
mkdir $dirname &&
mv $filename $dirname
done
可能出错的事情以及我假设您在运行此脚本之前检查的事情:
- 文件名中没有空格或特殊字符
- 可以创建目录,并且不与现有文件或目录冲突