我有许多包含同名文件的目录。我想将这些文件移动到另一个目录,同时用目录名重命名它们,以便区分它们并且不被覆盖。
编辑: 所有目录都位于同一目录中。目标是系统上的一个目录,可以是任何目录。我们读取目录并从中读取文件,将其重命名为目录名称,然后将其放入目标中。
一个重要的限制是,给定文件的名称将出现在所有目录中。目录可能包含其他文件,也可能包含给定的文件
多谢
答案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
这会将第一个通配符匹配的目录中的每个文件移动到目标目录中。