コピーしたいファイルがリストアップされているファイルを読み込み、別のフォルダーに同じ階層毎でコピーするシェルスクリプトです。
コピー元のパスを読み込み、コピー先にディレクトリーが無ければディレクトリーも作成してファイルをコピーします。
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
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 | コピー元のファイルのパスとファイル名がリストされています。 |
※筆者の環境で問題なく動作することは確認しておりますが、環境によっては上手く動作しないことも考えられますので自己責任で実行するようお願い致します。