シェルスクリプトを使ってファイルを別のフォルダーにコピーする

コピーしたいファイルがリストアップされているファイルを読み込み、別のフォルダーに同じ階層毎でコピーするシェルスクリプトです。

コピー元のパスを読み込み、コピー先にディレクトリーが無ければディレクトリーも作成してファイルをコピーします。

Windows上でlinuxコマンドやシェルスクリプトを実行できるbusyboxというツールを使えばWindows上でも、このシェルスクリプトを実行することができてWindowsファイルのコピーが簡単に行うことができます。

busyboxのダウンロード方法やインストール方法は本サイトでもご紹介しておりますのでぜひご覧ください(^^♪

簡単で便利なシェルスクリプトです。ちょっとした作業の効率アップにお使い下さい。

シェルスクリプトを使ってファイルを別のフォルダーにコピーする

上の図にある構成にもとづいて作成したシェルスクリプトがこれ↓になります。

コピー元のパスとファイル名を記述したリストファイル「list.txt」を読み込んで、同じディレクトリー階層でコピー先のディレクトリーにコピーをするシェルスクリプトです。

while read line
do
 dirn=$(dirname ${line})
 filen=$(basename ${line})
 Chgdirn=${dirn/temp/temp2}
 # echo $Chgdirn
 if [ -d $Chgdirn ]; then
  echo “ディレクトリーが既に存在しています”
 else
  mkdir -p $Chgdirn
 fi
 echo “*** $dirn/$filenをコピー開始 ***”
 cp $dirn/$filen $Chgdirn
 echo “*** $dirn/$filenをコピー終了 ***”
done < ./list.txt

 

シェルスクリプトの説明

dirname ディレクトリ名とファイル名を含むパス名からファイル名の部分だけを除き、ディレクトリ部分だけを取得するコマンドを使って、「list.txt」から読み込んだ1行を処理します。
basename ディレクトリ名とファイル名を含むパス名から、ディレクトリ部分を除き、ファイル名だけを取得するコマンドを使って、「list.txt」から読み込んだ1行を処理します。
Chgdirn 読み込んだパスのディストリビューションtempをtemp2に変更しChgdirnに格納します。
if [ -d $Chgdirn ] -d オプションでディレクトリーの有無を確認。また、-fオプションにするとファイルの有無を確認することができます。-eオプションにするとファイルやディレクトリーの有無を確認することができます。
mkdir -p  -pオプションを指定することで親ディレクトリーが存在しなくてもサブディレクトリーまで作成してくれます。
list.txt コピー元のファイルのパスとファイル名がリストされています。

※筆者の環境で問題なく動作することは確認しておりますが、環境によっては上手く動作しないことも考えられますので自己責任で実行するようお願い致します。