cp 大量檔案的錯誤: /usr/bin/cp: argument list too long

2011051108:44
cp 大量檔案 (好像超過 3 萬個檔案以上時, rm 大量檔案也會有相同訊息)
出現錯誤:

    bash: /usr/bin/cp: argument list too long


解決方法一
 

#! /bin/ksh

counts=0
for filename in `ls /home/user/data`
do
   counts=`expr $counts + 1`
   echo "cp to (b) $filename"
   cp /home/user/data/$filename /mnt/xxx/data
done
 

參考
http://stackoverflow.com/questions/5892339/unix-cp-argument-list-too-long



解決方法二

分批次複製 (或刪除、搬移)
cp [0-9]* /path
cp [a-f]* /path
cp [g-k]* /path


解決方法三
 

find /home/user/data -type f -exec cp {} /mnt/xxx/data \;



find /home/user/data/*.log -type f -exec cp {} /mnt/xxx/data \;
 



刪除大量檔案的方法
方法一

1.建立一個空目錄
$ mkdir /tmp/folder

2.開始刪除
  **特別注意 /tmp/folder/ 後面要加上斜線
$ rsync --delete-before -d /tmp/folder/   /home/myfolder/
 
方法二
ls /tmp/*.log | xargs rm -f   
參考
https://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux

*建立大量小檔案來測試的技巧
for i in $(seq 1 500); do echo testing >> $i.txt; done