【スポンサーリンク】

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

[mac] ゴミ箱に移動したフォルダ名が重複した場合【Directory not empty】
閲覧中のユーザー数
(閲覧中のユーザー:0)

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

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

特典ダウンロード
【ちいラボ読者特典】印刷してすぐ使える!
\記事が役に立ったらシェアしてね/
【スポンサーリンク】

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

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

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

Directory not empty

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

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

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

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

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

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

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

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

3. 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にはmvコマンドのオプションbackupがない

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

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

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

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

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

[mac] ゴミ箱に移動したフォルダ名が重複した場合【Directory not empty】
【スポンサーリンク】
タイトルとURLをコピーしました