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

Linuxテクニック

ダウンロードしたばかりのファイルなど、更新日時が新しいファイルを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で転送する方法を紹介しました。うまく利用すれば、毎回ファイル名を入力する手間を省くことができるでしょう。

Linuxテクニック
\シェアお願いします/
LFI

コメント

タイトルとURLをコピーしました