![递归移动文件到相对子文件夹](https://linux22.com/image/1445728/%E9%80%92%E5%BD%92%E7%A7%BB%E5%8A%A8%E6%96%87%E4%BB%B6%E5%88%B0%E7%9B%B8%E5%AF%B9%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9.png)
我搜索了有关此问题的主题,但未能实现我的目标。任何解决方案,无论是在 Ubuntu 还是在 Windows 中,cmd
都将不胜感激。
目前的架构是
/folderA/*.txt
大约有 100 个文件夹A
,每个文件夹大约有 50 个.txt
文件。它需要的结构如下:
/folderA/proj/*.txt
我需要以递归方式将所有 txt 文件移动到更深的一级名为 的新子文件夹中proj
。
答案1
这应该在 Bash 中完成:
#!/bin/bash
shopt -s dotglob
find * -prune -type d | while read d; do
mkdir "$d"/proj
mv "$d"/*.txt "$d"/proj
done
如果您必须使用 Windows,请尝试以下操作:
@ECHO OFF
FOR /D %%G IN (*) DO (
MKDIR "%%G"\proj
MOVE "%%G"\*.txt "%%G"\proj > nul
)
答案2
可以使用以下脚本完成此操作。您现有的目录结构如下所示,其中大约有 100 个文件夹,每个文件夹包含 50 个 .txt 文件。
在实际使用之前,请先在具有与您拥有的文件夹结构类似的文件夹结构的测试数据上尝试以下脚本。
项目脚本
@echo off
setlocal EnableDelayedExpansion
FOR /D %%G IN (fold*) DO (
MKDIR "%cd%\%%G\proj"
MOVE "%cd%\%%G\*.txt" "%cd%\%%G\proj"
)
答案3
将文件和文件夹移动到/folderB/proj/*.txt
。删除folderA
。重命名folderB
为folderA
。