"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