File-Copy
將數百萬個文件移動到具有特定名稱模式的不同目錄
我在 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"
會成功的。