Scripting
Nautilus-腳本將文件移動到同名目錄
如何創建將所選文件移動到同名新文件夾的 Nautilus 腳本?
我的出發點:/home/user/123 這裡的 123 是一個沒有副檔名的文件
我的目標是實現這個結果:/home/user/123/123 這裡我們在新文件夾中有相同的文件 123,也命名為 123
我無法弄清楚這一點,因為我所做的每一次嘗試都給了我結果:mkdir: cannot create directory `123’: File exists
您不能同時擁有兩個同名文件,因此您需要先以臨時名稱創建目錄,然後將文件移入其中,然後重命名目錄。或者將文件重命名為臨時名稱,創建目錄,最後移動文件。
我看到Nautilus 腳本可以用任何語言編寫。您可以使用最普遍的腳本語言來做到這一點,
/bin/sh
.#!/bin/sh set -e for file do case "$file" in */*) TMPDIR="${file%/*}"; file="${file##*/}";; *) TMPDIR=".";; esac temp="$(mktemp -d)" mv -- "$file" "$temp" mv -- "$temp" "$TMPDIR/$file" done
說明:
set -e
出錯時中止腳本。for
循環遍歷腳本的參數。- 該
case
塊設置TMPDIR
為包含該文件的目錄。無論參數包含基本名稱還是帶有目錄部分的文件路徑,它都有效。mktemp -d
在 中創建一個具有隨機名稱的目錄$TMPDIR
。- 首先我將文件移動到臨時目錄,然後重命名該目錄。這樣,如果操作在中間被中斷,文件仍然有它想要的名稱(而在 rename-file-to-temp 方法中,文件有一個錯誤名稱的時間點)。
如果要從目錄中刪除文件的副檔名,請將最後一次
mv
呼叫更改為mv -- "$temp" "$TMPDIR/${file%.*}"
${file%.*}
取 的值file
並刪除匹配的後綴.*
。如果文件沒有副檔名,則名稱保持不變。