今日生成されたファイル(FINDコマンドとSFTPなし)を別のサーバーにコピーします。

今日生成されたファイル(FINDコマンドとSFTPなし)を別のサーバーにコピーします。

"n"個のファイルがあるディレクトリがあります。スクリプトが実行されている特定の日に生成されたファイルのみを一覧表示し、その日にリストされたファイルをsftp別のサーバーに移動するために使用されるシェルスクリプトを作成しようとしています。私はそれを使用したくありませんfind

使ってみよう

ls -l  --time-style=+%D | grep $(date +%D) | grep -v '^d'

今日生成されたファイルを一覧表示します。sftpディレクトリを別のサーバーにコピーできるように、リストされたファイルを別のディレクトリにコピーするにはどうすればよいですか。次のコマンドを試しましたが、うまくいきませんでした。

ls -l  --time-style=+%D | grep $(date +%D) | grep -v '^d' > /home/oracle/SABARISH/logs/files/

sftpシェルスクリプトをどのように使用しますか?sftpコマンドラインで試しましたが、スクリプトで使用するときは異なります。

ベストアンサー1

次のことができます。

files=$( ls -l --time-style=+%D | grep $(date +%D) | grep -v '^d' | awk '{print $NF}' ) ; for f in $files ; do cp -rf $f /home/oracle/SABARISH/logs/files/ ; done ; sftp {user}@{host}:{remote_dir} <<< 'put /home/oracle/SABARISH/logs/files/*'

または次のようなもの:

for f in $(ls -l --time-style=+%D | grep $(date +%D) | grep -v '^d' | awk '{print $NF}') ; cp -rf $f /home/oracle/SABARISH/logs/files/ ; done ; sftp {user}@{host}:{remote_dir} <<< 'put /home/oracle/SABARISH/logs/files/*'

awk はファイル名を抽出するために使用されます。

#!/bin/bash
FILES=$(ls -l test1_*.txt --time-style=+%D | grep ${DATE} | grep -v '^d' | awk '{p rint $NF}' )

if [ -n "${FILES}" ]
then
    for f in ${FILES}
    do
        cp -prf ${f} ${DESTINATION}
    done
    sftp ${USER}@${HOST}:${CD} <<< 'put /home/oracle/SABARISH/logs/sftp/*'
else
    echo "NO FILES TO MOVE"
fi

おすすめ記事