如何根据目录名重命名和移动文件?

如何根据目录名重命名和移动文件?

我有许多包含同名文件的目录。我想将这些文件移动到另一个目录,同时用目录名重命名它们,以便区分它们并且不被覆盖。

编辑: 所有目录都位于同一目录中。目标是系统上的一个目录,可以是任何目录。我们读取目录并从中读取文件,将其重命名为目录名称,然后将其放入目标中。

一个重要的限制是,给定文件的名称将出现在所有目录中。目录可能包含其他文件,也可能包含给定的文件

多谢

答案1

假设这些文件的文件名是thefilename,您已cd进入包含这些目录的目录,并且想要将它们移动到/path/to/dest,则以下 shell 循环应该可以解决问题

for file in */thefilename; do
    echo mv -iv "./$file" "/path/to/dest/${file%/*}"
done

您可以直接在交互式 shell 中运行它,或者将其放在文件中并将其作为脚本运行。

我添加了一个,echo让它只打印 mv 命令。如果输出看起来正确,请删除echo并再次运行它,让它真正执行移动。

答案2

如果您使用 bash,则可以执行以下操作:

$ for i in *WhatEverMatchesYourOriginalDirectories*
do
  cd $i
  for j in *
  do
    mv $j ../Target/${i}-${j}
  done
  cd ..
done

这会将第一个通配符匹配的目录中的每个文件移动到目标目录中。

相关内容