如何在 bash shell 的 for 循环中指定 2 个变量?

如何在 bash shell 的 for 循环中指定 2 个变量?

我在一个文件夹中有多个图像文件,并为每个文件创建了一个文件夹。现在我想要cp每个文件夹中一个文件。

我用了

for i in `seq 1 9`; do mkdir $i; done

然后将所有文件复制到文件夹中。我尝试使用

for s in Whats* && i in `seq 1 9`;do cp $s $i;done
for s in *; do for i in `seq 1 9`;do mkdir $i;done;cp $s $i;done

这显然不起作用。 (所有文件名均以WhatsApp开头)

如何在每个文件夹中一次复制一个文件?

答案1

假设您想要具有整数名称的目录,并且您希望每个文件都有一个与./WhatsApp*模式匹配的目录:

shopt -s nullglob

counter=0
for name in ./WhatsApp*; do
    counter=$(( counter + 1 ))
    mkdir "$counter" && cp "$name" "$counter"
done

这会尝试为每个匹配的名称创建一个目录,如果成功,则会将文件复制到该新目录。mkdir如果该目录已存在,或者您在当前目录中没有写入和执行权限,则调用将失败。

nullglob在循环之前设置了 shell 选项,以避免在没有与给定模式匹配的名称时运行循环的单次迭代。如果没有设置nullglob,循环将运行一次并将$name设置设置为文字字符串./WhatsApp*

相关内容