将每个目录上的一些文件移动到不同的目录

将每个目录上的一些文件移动到不同的目录

可能的重复:
如何按类型递归地将文件从目录及其子目录移动到另一个目录?

我对 Linux 特别是 shell 及其所有命令都很陌生。我的目标是将每个目录中的一些文件移动到另一个目录。为了更清楚,我有这个:

/DIR  
- /dir1  
  - file1  
  - file2  
  - ...  
- /dir2  
  - file1  
  - file2  
  - ...  
- ...  
- /dirn  
  - file1  
  - file2  
  - ... 

我需要的是将所有 file1 和 file2 移动到其自己目录中的新目录中,以便我得到如下内容:

/DIR  
- /dir1
  - /mydir
      - file1  
      - file2  
  - ...  
- /dir2
  - /mydir
      - file1  
      - file2  
  - ...  

为了这个问题,我不得不说目录名称不像“dir1”、“dir2”等,而是任意名称。但是,文件的名称始终相同(models.py 和wrappers.py)。感谢您的帮助。
PS:如果您能向我解释您的答案,我将非常感激,以便更多地了解 Linux,而不仅仅是复制粘贴代码。

答案1

cd DIR 
for dir in $(find . -maxdepth 1 -mindepth 1 -type d -printf "%f\n" )
do
    cd $dir
    mkdir -p mydir
    mv *.py mydir
    cd ..
done

cd 进入顶级目录。 find 命令将查找所有符合所提供条件的文件并打印它们。 MaxDepth 和 MinDepth 将搜索限制为直接位于 DIR 下的文件,而 Type 将结果列表限制为目录。使用 for 循环迭代 find 命令返回的每个目录。 cd 进入每个目录,创建 mydir 子目录,将文件移入其中,然后 cd 回到 DIR ,以便下一次迭代可以处理下一个目录。

如果 DIR 下有任何其他不包含 *.py 的目录,您可以通过在 cd $dir 行上方插入 if 语句来跳过它们:

if [ "$dir" = "skip" -o "$dir" = "whatever" ]; then continue; fi

相关内容