カレントディレクトリにある最新のファイル〇個をscpコマンドで転送する方法【Linux・Bash】


ダウンロードしたばかりのファイルなど、更新日時が新しいファイルをscpで別のPCやNASに転送したい、ということがあります。そんな時、毎回ファイル名を調べて入力する(あるいはコピペする)のは非効率的です。最新のファイル〇個を転送する、と指定できれば時短になるでしょう。

そこで、この記事ではカレントディレクトリにある最新のファイル〇個をscpコマンドを使用して別のサーバーに転送する方法を紹介します。

コマンドラインでのファイル転送

コマンドラインで最新のファイル〇個を転送するには、以下のように実行します。

IFS=$'n' files=($(ls -t | head -n 3)scp "${files[@]}" [ユーザー名]@[ホスト名]:[パス]/

このコマンドは、カレントディレクトリ内のファイルを新しい順にソートし、最新の3つのファイルを指定したリモートホストに転送します。必要に応じて、[ユーザー名][ホスト名]、および[パス]を実際の情報に置き換えてください。

スクリプトを使用してファイルを転送

頻繁に実行するなら、毎回上記のコマンドを貼り付けるのも面倒でしょう。そこで、便利なのが以下のスクリプトです。送信するファイル数を指定するだけで実行できるようになります。

#!/bin/bash



# 引数の確認

if [ "$#" -ne 1then

    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で転送する方法を紹介しました。うまく利用すれば、毎回ファイル名を入力する手間を省くことができるでしょう。



Copied title and URL