如何创建一个 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/
您可以使用绝对路径