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

时间:2018-03-04 18:48:22

标签: bash rename

如果我在错误的位置发布这个,我提前道歉,我对脚本很新,更不用说stackoverflow了:

我有许多文件以.conf结尾,在同一目录中,文件名相同,但没有.conf扩展名。例如,我的目录如下所示:

136
136.conf
139
139.conf
...

我想通过循环将.conf文件移动到相应的文件夹中。我以为我能做到这一点:

for f in *.conf; do
    dir=${f:0:13}
    mv "$f" "$dir"
done

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

1 个答案:

答案 0 :(得分:0)

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

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

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