我在一个文件夹中有多个图像文件,并为每个文件创建了一个文件夹。现在我想要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*
。