Nautilus-script 将文件移动到同名目录中

Nautilus-script 将文件移动到同名目录中

如何创建一个 Nautilus 脚本,将选定的文件移动到同名的新文件夹中?

我的起点:/home/user/123 这里的123是一个没有扩展名的文件

我的目标是实现以下结果: /home/user/123/123 这里我们在新文件夹中拥有相同的文件 123 ,也名为 123

我无法弄清楚这一点,因为我所做的每次尝试都给出了结果: mkdir: 无法创建目录“123”: 文件存在

答案1

您不能同时拥有两个同名的文件,因此您需要首先以临时名称创建目录,然后将文件移入其中,然后重命名该目录。或者将文件重命名为临时名称,创建目录,最后移动文件。

我看到鹦鹉螺脚本可以用任何语言编写。您可以使用最普遍的脚本语言/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/

您可以使用绝对路径

相关内容