将数百万个文件移动到具有特定名称模式的不同目录

Apr*_*cot 10 file-copy

我在 Linux 机器上有数百万个具有以下命名法的文件:

1559704165_a1ac6f55fef555ee.jpg
Run Code Online (Sandbox Code Playgroud)

前 10 位数字是时间戳,后跟 a 的数字_是特定的 ID。我想将与特定文件名 ID 匹配的所有文件移动到不同的文件夹。

我在带有文件的目录上试过这个

find . -maxdepth 1 -type f | ??????????_a1ac*.jpg |xargs mv -t "/home/ubuntu/ntest"
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误指示:

bash 1559704165_a1ac6f55fef555ee.jpg: command not found
Run Code Online (Sandbox Code Playgroud)

当我尝试时,mv ??????????_a1ac*.jpg 我收到参数列表太长错误。我至少有 15 种不同的文件名模式。我如何移动它们。

Prv*_*dav 15

你应该使用:

find . -maxdepth 1 -type f -name '??????????_a1ac*.jpg' \
-exec mv -t destination "{}" +
Run Code Online (Sandbox Code Playgroud)

所以maxdepth 1意味着你想在当前目录中搜索没有子目录。

type f 表示只查找文件。

name '??????????_a1ac*.jpg' 是与您正在搜索的文件匹配的模式。

mv -t destination "{}" +表示将匹配的文件移动到目的地。这里+将新的匹配文件添加到以前的文件中,例如:

mv -t dest a b c d
Run Code Online (Sandbox Code Playgroud)

这里 abcd 是不同的文件。


wal*_*tor 11

你的命令,

find . -maxdepth 1 -type f | ??????????_a1ac*.jpg |xargs mv -t "/home/ubuntu/ntest"
Run Code Online (Sandbox Code Playgroud)

将所有文件的列表传送到所有文件!

find . -maxdepth 1 -type f -name `*_a1ac*.jpg` -print0 |\
xargs  -0 -r mv -t "/home/ubuntu/ntest"
Run Code Online (Sandbox Code Playgroud)

会做的伎俩。


Ste*_*ris 8

你很亲近。您应该使用该-name选项来find. 并记住引用模式。

所以

find . -maxdepth 1 -type f -name '??????????_a1ac*.jpg' |xargs mv -t "/home/ubuntu/ntest"
Run Code Online (Sandbox Code Playgroud)