Nautilus-script はファイルを同じ名前のディレクトリに移動します。

Nautilus-script はファイルを同じ名前のディレクトリに移動します。

選択したファイルを同じ名前の新しいフォルダに移動するためのノーチラススクリプトをどのように作成できますか?

私の始点:/home/user/123ここ123は拡張子のないファイルです。

私の目標は、次の結果を得ることです。 /home/user/123/123 ここには、123 という名前の新しいフォルダに同じファイル 123 があります。

試みるたびに mkdir: '123' ディレクトリを作成できません: ファイルが存在するという結果が出るため、これを把握できません。

ベストアンサー1

同じ名前の2つのファイルを同時に持つことはできないので、まず一時的な名前でディレクトリを作成し、ファイルをそのディレクトリに移動してからディレクトリの名前を変更する必要があります。または、ファイル名を一時的な名前に変更してディレクトリを作成し、最後にファイルを移動します。

私は見た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
  • まず、ファイルを一時ディレクトリに移動し、次にディレクトリの名前を変更しました。これにより、操作が途中で中断されても、ファイルは依然として必要な名前を保持します(一方、一時ファイルに名前を変更する方法では、ファイル名が間違った時点があります)。

ディレクトリからファイル拡張子を削除するには、最後のmv呼び出しを次に変更します。

mv -- "$temp" "$TMPDIR/${file%.*}"

${file%.*}値を取得し、file一致するサフィックスを削除します.*。ファイルに拡張子がない場合、名前は変更されません。

おすすめ記事