特定ファイルを処理する場合、
lsやfindした結果をパイプで繋いで処理しますが、
特定ファイルが大量に存在する場合のメモ。
# パターンその1 # ファイルが多すぎるとエラーになる ls *.txt | xargs rm
# パターンその2 # ファイルが多すぎるとエラーになる find -f *.txt | xargs rm
# パターンその3 # ファイルが多すぎ手も処理できるがメモリを消費 echo *.txt | xargs rm
特定ファイルを処理する場合、
lsやfindした結果をパイプで繋いで処理しますが、
特定ファイルが大量に存在する場合のメモ。
# パターンその1 # ファイルが多すぎるとエラーになる ls *.txt | xargs rm
# パターンその2 # ファイルが多すぎるとエラーになる find -f *.txt | xargs rm
# パターンその3 # ファイルが多すぎ手も処理できるがメモリを消費 echo *.txt | xargs rm
cat /etc/issue CentOS release 6.6 (Final) Kernel \r on an \m
uname -a Linux z-area.net 2.6.32-504.23.4.el6.x86_64 #1 SMP Tue Jun 9 20:57:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
シェルでLFTPでファイルを取得する必要があったので。
#!/bin/sh echo "処理開始" >> result.log # LFTP接続 lftp -f command.txt >> ftp.log # ftp.logに先頭から始まる「abc*」がない場合 if ! grep "^abc*" ftp.log > /dev/null 2>&1; then # ftp.logの内容をresult.logに移し、ftp.logを初期化し、処理正常 cat ftp.log >> result.log echo "処理終了(ファイルなし)" >> result.log cp /dev/null ftp.log exit 0 # ftp.logに先頭から始まる「abc*」がある場合 else # ftp.logの内の先頭から始まる「abc*」をgrepする for X in `grep "^abc*" ftp.log` do # ファイル名(grep結果)が取得できている場合(-eが存在確認) if [ ! -e $X ]; then # ftp.logの内容をresult.logに移し、ftp.logを初期化し、処理異常 cat ftp.log >> result.log echo "ファイル転送エラー" >> result.log cp /dev/null ftp.log exit 1 fi done fi # ftp.logの内容を初期化し、処理正常 echo "処理終了" >> result.log cp /dev/null ftp.log exit 0;
command.txtの内容 open IP user ユーザ名 パスワード cd /test cls abc*.txt mget abc*.txt
ftp.logは処理が終了すると0バイトに初期化するが、
処理中は下記状態となる。
【正常の場合(取得ファイルあり)】
abc1.txt
abc2.txt
【正常の場合(取得ファイルなし)】
ファイル取得エラー
【異常の場合】
abc1.txt
abc2.tx
ファイル転送エラー