選択したファイルを同じ名前の新しいフォルダに移動するためのノーチラススクリプトをどのように作成できますか?
私の始点:/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
一致するサフィックスを削除します.*
。ファイルに拡張子がない場合、名前は変更されません。
答え2
説明を見ればわかるけどここ、
ディレクトリは特別な種類のファイルなので、同じ名前のファイルとフォルダを持つことはできません。
私の提案は、名前の変更>作成>移動と&&
コマンドの確認を実行することです。
例えば
mv 123 123_tmp && mkdir 123 && mv 123_tmp 123/
絶対パスを使用できます