【发布时间】:2021-11-19 14:18:28
【问题描述】:
我有一个不同格式的文件列表,所有文件在同一目录中都具有相同的名称(即 file1.txt、file1.conf、file2.txt、file2.conf 等)。我要做的是根据文件名创建目录,然后将所有相应的文件移动到新创建的目录中。
我在 Stack Overflow 中发现了几个与切线相关的问题,我试图将它们汇总在一起:
#!/bin/bash
for f in ./*.txt ./*.conf ; do
[[ -e "$f" ]]
dir="${f%.*}"
if [ ! -d "$dir" ] ; then
mkdir "$dir"
fi
mv "$f".* "$dir"
done
诚然,我是在 shell 中工作的新手,所以我还不完全理解参数化。我认为在for 循环中我会使用-e 标志来检查.txt 或.conf 文件是否存在,文件名被分配给$f,创建一个名为$f 的目录它还没有存在,然后将所有名为 $f 的文件移动到目录中。
【问题讨论】:
-
您可以使用
./*.*对每个带有扩展名的文件执行此操作。否则,我会明确指定要定位的所有扩展。无论哪种方式,使用mv "$f" "$dir"(不是"$f".*),使用[[ -e "$f" ]] || continue,并且您还真的需要检查$dir不是现有文件,否则您将覆盖它。