Bash 将文件移动到同名文件夹

foo*_*ise 4 bash rename

如果我将其发布在错误的位置,我提前道歉,我对脚本编写非常陌生,更不用说 stackoverflow 了:

我有许多文件.conf与许多同名但不带.conf扩展名的文件夹位于同一目录中。例如,我的目录如下所示:

136
136.conf
139
139.conf
...
Run Code Online (Sandbox Code Playgroud)

我想.conf用循环将文件移动到相应的文件夹中。我想我可以这样做:

for f in *.conf; do
    dir=${f:0:13}
    mv "$f" "$dir"
done
Run Code Online (Sandbox Code Playgroud)

但我显然做错了什么。我将非常感谢任何人对此的帮助。

cod*_*ter 5

使用 Bash 参数扩展通过删除扩展名( 后面的任何内容.)来派生目录名称:

for f in *.conf; do
  [[ -f "$f" ]] || continue # skip if not regular file
  dir="${f%.*}"
  mv "$f" "$dir"
done
Run Code Online (Sandbox Code Playgroud)

这比子字符串方法好一点,因为我们不对文件名或目录名的长度做出假设。