【スポンサーリンク】

[mac] ゴミ箱に移動したフォルダ名が重複した場合【Directory not empty】

mvコマンドではゴミ箱(.Trash)に同名フォルダがあると移動できませんでした。

シェルスクリプトで、同名フォルダの存在を確認して、タイムスタンプを付加するようにしました。

\記事が役に立ったらシェアしてね/
【スポンサーリンク】

mvコマンドでは同名フォルダがあると移動できない

シェルスクリプトで、コピー済みのフォルダをゴミ箱に移動していたら、うまく移動できていないことに気づきました。

Directory not empty

このエラーは、mvコマンドでフォルダ(ディレクトリ)を移動する際に、移動先にも同じフォルダが存在する場合に表示されます。

mvコマンドでは、同名フォルダが重複しても、勝手に統合してくれるわけではありません。

Finderの「削除」では添字が付加されていた

しかし、ふだんの「削除」、つまり Finder でフォルダを削除するときには、同じ名前を気にする必要はありません。

実は、Finderでは、削除でも、ゴミ箱への移動でも、ファイル名が重複した場合には、後ろに添え字が追加されています。

つまり、自動的にフォルダ名の重複を防いでくれているんですね。

ファイル名重複を避ける処理を追加する必要があるわけです。

macにはmvコマンドのオプションbackupがない

mvのGNU coreutils 9.1のマニュアル(mv invocation (GNU Coreutils 9.1))を見ると、backupとsuffixのオプションがあります。

  • –backup[=,CONTROL/]
    ファイルを上書きする際に、バックアップを作成する
    • none, off
      バックアップを作成しない (–backup を付けた時でも)
    • numbered, t
      番号付きバックアップを作成する
    • existing, nil
      番号付きバックアップがあれば番号付き、
      そうでなければ、simple で作成する
    • simple, never
      常に簡易バックアップを作成
  • -S, –suffix=,SUFFIX/
    通常のバックアップ接尾辞を SUFFIX で上書きする

例えば、このようにタイムスタンプを元に、バックアップをすることができます。

mv --backup --suffix=.$(date +%Y%m%d_%H%M%S) 移動元 移動先

ところが、macosのターミナルでは、無効なオプションになってしまいます。

macのターミナルでman mvを表示すると、オプションが少ないのです。

スクリプトで同名ファイルの存在確認とタイムスタンプ

そうなると、自分でバックアップのスクリプトを組む必要があります。

このシェルスクリプトでは、$SRCにカレントディレクトリを移動して、内部のファイルをゴミ箱に移動しています。

もし、すでに同名ファイルがある場合は、タイムスタンプを追加してリネームしています。

DST=~/.Trash
cd $SRC
for file in *; do
    newfile="$DST"/$file
    while [ -e $newfile ]; do
        newfile="$DST"/${file##*/}`date "+%Y-%m-%d-%H%M%S"`
    done

    mv -v "$file" "$newfile"
done

フォルダ「a」を作成して何度もゴミ箱に移動したら、ちゃんとタイムスタンプが追加できました。

こちらもどうぞ。

[mac] コマンドラインからゴミ箱に入れる【~/.Trash】
mv ~/.Trash Macの「ゴミ箱」フォルダに移動する rmコマンドだと完全に削除される macでゴミ箱に移動する処理を自動化したい、と思いました。 シェルスクリプトで削除するなら、rm(remove)を使うのですが、▶ 何を削除したか後から確認できない、▶ これは失敗したら元に戻せない、という欠点があります。 「ゴミ箱」フォルダは ~/.Trash macの「ゴミ箱」フォルダの場所は、「~...
同じ名前のフォルダをまとめる操作【WindowsとMac】
Macでのフォルダの「結合」は、Windowsでは、どんな用語ですか? Windowsでも、同じ名前のフォルダの中身をまとめることを、「結合(merge)」といいます。 ◆ こちらの記事の関連 同名フォルダの結合 Windowsでは、フォルダの移動・コピー先に同名フォルダがあった場合、両方のフォルダの中のファイルが格納されます。この動作は、「結合(merge)」と表示されます。 Windowsフォ...
[Mac] 移動先に同名のフォルダがある場合の置き換えと統合の注意点 【Windowsとの違い】 dittoコマンド
「作業中」フォルダに花の写真をまとめた「花」というフォルダがあって、「完了」フォルダに移動する、とします。 このとき、移動先の「完了」フォルダにすでに同じ名前の「花」フォルダがあったらどうなるのか、というのが今回のテーマです。 Windows PCの場合は、どちらも残せる Windows PCでフォルダを移動した場合、中のファイルはすべて、移動先の同名フォルダに移動します。 つまり、「作業中¥花」...
QRコードを読み込むと、関連記事を確認できます。
[mac] ゴミ箱に移動したフォルダ名が重複した場合【Directory not empty】
【スポンサーリンク】
タイトルとURLをコピーしました