可能的重复:
如何按类型递归地将文件从目录及其子目录移动到另一个目录?
我对 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