我在 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)
会做的伎俩。
你很亲近。您应该使用该-name
选项来find
. 并记住引用模式。
所以
find . -maxdepth 1 -type f -name '??????????_a1ac*.jpg' |xargs mv -t "/home/ubuntu/ntest"
Run Code Online (Sandbox Code Playgroud)