Scripting

Nautilus-腳本將文件移動到同名目錄

  • May 27, 2016

如何創建將所選文件移動到同名新文件夾的 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並刪除匹配的後綴.*。如果文件沒有副檔名,則名稱保持不變。

引用自:https://unix.stackexchange.com/questions/285788