ダウンロードしたばかりのファイルなど、更新日時が新しいファイルをscpで別のPCやNASに転送したい、ということがあります。そんな時、毎回ファイル名を調べて入力する(あるいはコピペする)のは非効率的です。最新のファイル〇個を転送する、と指定できれば時短になるでしょう。
そこで、この記事ではカレントディレクトリにある最新のファイル〇個をscpコマンドを使用して別のサーバーに転送する方法を紹介します。
コマンドラインでのファイル転送
コマンドラインで最新のファイル〇個を転送するには、以下のように実行します。
IFS=$'\n' files=($(ls -t | head -n 3)); scp "${files[@]}" [ユーザー名]@[ホスト名]:[パス]/
このコマンドは、カレントディレクトリ内のファイルを新しい順にソートし、最新の3つのファイルを指定したリモートホストに転送します。必要に応じて、[ユーザー名]
、[ホスト名]
、および[パス]
を実際の情報に置き換えてください。
スクリプトを使用してファイルを転送
頻繁に実行するなら、毎回上記のコマンドを貼り付けるのも面倒でしょう。そこで、便利なのが以下のスクリプトです。送信するファイル数を指定するだけで実行できるようになります。
#!/bin/bash
# 引数の確認
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <number_of_files>"
exit 1
fi
# ファイル数の取得
num_files=$1
# 最新のファイルを取得してscpで転送
IFS=$'\n' files=($(ls -t | head -n $num_files))
scp "${files[@]}" [ユーザー名]@[ホスト名]:[パス]/
[ユーザー名]
、[ホスト名]
、および[パス]
を実際の情報に置き換える必要があるのは、コマンドラインで実行する場合と同様です。
上記のスクリプトを、例えばtransfer_files.sh
という名前で保存します。その後、以下のコマンドを実行してスクリプトに実行権限を付与します。
chmod +x transfer_files.sh
このスクリプトを使用して5つの最新のファイルを転送するには、以下のように実行します。
./transfer_files.sh 5
まとめ
この記事では、カレントディレクトリから最新のファイルをscpで転送する方法を紹介しました。うまく利用すれば、毎回ファイル名を入力する手間を省くことができるでしょう。
コメント