Bash - 将具有相似名称的文件从多个目录移动到pwd

Bash - 将具有相似名称的文件从多个目录移动到pwd

假设我有目录:

mydir1
mydir2
mydir3
mydir4

包含以 开头的文件abcd

我想将所有以 开头的文件移动abcd到父目录。我该怎么做?

以下是我玩过的内容:

for file in pwd; mv *abcd ../

答案1

cd 到父目录,然后:

for f in */abcd*;
do mv $f ./
done

这将匹配等mydir1/abcdfoomydir2/abcdbar并将它们移动到 pwd(即父目录)。如果您只想查找名为 mydir* 的目录,您可以指定

for f in mydir*/abcd*; 
do mv $f ./
done

你也可以这样做

find . -name "abcd*" -type f -exec mv {} ./ \;

查找所有名为 abcd* 的常规文件(不是目录)并将它们移动到 pwd。 find 从 find 命令后指定的目录(在本例中为“。”)开始递归查找。 您可以使用绝对路径,例如:

find /path/to/the/parent/dir -name "abcd*" -type f -exec mv {} /path/to/the/destination/dir/ \;

警告:我刚试的时候就注意到了这一点。如果不同目录中有多个同名文件,例如 mydir1/abcdfoo、mydir2/abcdfoo 等等,除了一个文件之外,其他文件都将被覆盖,父目录中只剩下一个 abcdfoo 文件。

相关内容