我需要编写一个脚本,进入目录列表,然后将 cretin 文件类型的文件移动到另一个目录中。
使用下面的代码,我可以遍历目录中的所有文件夹并打印它们的名称。我想我需要进入和退出这些文件夹。
for d in */
do
echo "$d"
done
下面的代码将遍历每个 .png 文件并将其移动到所需的目录。
for file in *.png
do
mv "$file" /desired/directory
done
现在由于某种原因,当我将第二段代码块放入第一段代码块时,我得到了以下输出:
mv: cannot stat ‘*.png’: No such file or directory
我如何让它遍历并移动每个文件?我想将此脚本放在 /search/directory/ 的根目录下
答案1
for d in */
do
mv - n *.png /desired/directory/
done
存在一个问题,即第一个文件将被写入,而后面的文件不会被写入,因为设置了 -n 标签,否则第二个文件将覆盖第一个文件并丢失第一个文件。这不会复制子目录中的任何文件
划掉使用
find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/ \;
但对于同名文件会出现同样的问题
如果您想要复制命名文件,例如 Pic.png 1Pic.png 2Pic.png 等
dup=1
find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/ \;
while(find /search/directory/ -inane "*.png" | wc -l !=0)
find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/$dup$(basename {}) \;
dup++
done
如果 /desired/directory 位于 /search/directory 中,则不会跳出此循环。我凭直觉做了这件事,唯一担心的是 while 条件可能需要在括号中使用 find | wc,可能前面还有 $。可以通过错误检查进一步改进,并使用 .png /search/directory /desired/directory 作为参数
答案2
这应该可以做到:
#!/bin/bash
for dir in /full/path/to/recup_Dir.{1..976}; do
mv "$dir"/*.png /full/path/to/desired/directory/
done
这里我们循环遍历源目录,然后将.png
这些目录中的所有文件复制到所需目录。由于我们在这里使用绝对路径,因此您可以从任何位置运行此脚本。