Bash将文件移动到同名文件夹[重复]

问题描述 投票:2回答:1

这个问题在这里已有答案:

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

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

136
136.conf
139
139.conf
...

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

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

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

bash rename
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.