File-Copy

將數百萬個文件移動到具有特定名稱模式的不同目錄

  • July 10, 2019

我在 Linux 機器上有數百萬個具有以下命名法的文件:

1559704165_a1ac6f55fef555ee.jpg

前 10 位數字是時間戳,後面的數字_是特定的 id。我想將與特定文件名 id 匹配的所有文件移動到不同的文件夾。

我在帶有文件的目錄上嘗試了這個

find . -maxdepth 1 -type f | ??????????_a1ac*.jpg |xargs mv -t "/home/ubuntu/ntest"

但是我收到一條錯誤消息:

bash 1559704165_a1ac6f55fef555ee.jpg: command not found

當我嘗試時,mv ??????????_a1ac*.jpg 我得到參數列表太長的錯誤。我至少有 15 種不同的文件名模式。我該如何移動它們。

你應該使用:

find . -maxdepth 1 -type f -name '??????????_a1ac*.jpg' \
-exec mv -t destination "{}" +

所以maxdepth 1意味著您要在目前目錄中搜尋沒有子目錄。

type f表示僅查找文件。

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

mv -t destination "{}" +表示將匹配的文件移動到目的地。這裡+將新的匹配文件添加到以前的文件中,例如:

mv -t dest a b c d

這裡 abcd 是不同的文件。

你的命令,

find . -maxdepth 1 -type f | ??????????_a1ac*.jpg |xargs mv -t "/home/ubuntu/ntest"

將所有文件的列表通過管道傳輸到所有文件!

find . -maxdepth 1 -type f -name `*_a1ac*.jpg` -print0 |\
xargs  -0 -r mv -t "/home/ubuntu/ntest"

會成功的。

引用自:https://unix.stackexchange.com/questions/528679