スペースを含むディレクトリやファイルを cp コマンドでコピー


  • bash の for ループだとスペースを含むファイルリスト、例えば「Ahmad Jamal」であれば、「Ahmad」と「Jamal」に分かれてしまって上手く行かない。
    • for ループの例、for i in `cat list` ;do echo $i;done
  • そこで、ls コマンドで取得したファイルリストを、下記のような while read を使ったシェルスクリプトに読み込ませ、バッチシェルを出力する。

1. まず、ファイル名のリストを作成

$ ls /media/disk-1/MyMusic/Music > copy-from-list

2. バッチ作成のためのシェルスクリプトを作成(ファイル名を batch-create.sh と

$ vi batch-create.sh
=================================
while read LINE; do
echo cp -r \"/media/disk-1/MyMusic/Music/$LINE\" /media/disk-2/MyMusic/Music/
done
=================================

3. ファイルリストを読み込ませてバッチを作成する。

$ sh batch-create.sh < copy-from-list > copy-batch.sh

4. バッチを実行する。

$ sh copy-batch.sh


  • タイムスタンプを加えたスクリプトの例

while read LINE; do
echo echo \`date\` copy \"/media/disk-1/MyMusic/Music/$LINE\"
echo cp -r \"/media/disk-1/MyMusic/Music/$LINE\" /media/disk-2/MyMusic/Music/
echo date
done

コメント

このブログの人気の投稿

systemd-resolveの設定(Ubuntuなどの動的DNS設定)

GRUB起動メニューのタイムアウト時間、起動するOSの変更

Salesforce Trailheadチャレンジメモ(Apex の基礎とデータベース)