如何使用 bash/for 循环在子目录内移动文件?

如何使用 bash/for 循环在子目录内移动文件?

我有一个文件夹,里面有 20 个不同的扩展文件,我想将这些文件移动到 3 个不同的文件夹中。现在,我该如何移动所有这些文件(目前它们最终进入文件夹的条件并不重要),而不移动这 3 个子目录(假设它们已经存在)?目前,我无法将这些子文件夹放入它们自己中,显然我不想这样做,所以我只想将与 3 个子文件夹处于同一级别的文件放入这 3 个子文件夹中。谢谢!

附言:如果我在 for 循环中关注 *.txt,它会告诉我无法启动它,所以我很困惑。

X
 |_A
 |_B
 |_C
 |_file1.ext
 |_file2.ext
 |_file3.ext
 .
 .
 .
 |_file20.ext  

答案1

排除子目录的一些选项:

  1. 因为您要移动带有扩展名的文件,所以更改for i in *for i in *.*(这可能是最简单的选项,前提是您的子目录名称都不包含字符.

  2. 为文件类型 ex 添加明确的测试。for i in *; do [[ -f "$f" ]] || continue; ...

  3. (与上面类似)使用find . -maxdepth 1 -type f -exec ...

  4. 切换到支持 glob 限定符的 shell,例如 zsh - 您可以在其中写入for f in *(.)仅循环遍历常规文件

相关内容