将带有图案的文件复制到不同的文件夹

将带有图案的文件复制到不同的文件夹

在目录中我有以下文件:

勒布朗_2018.txt 勒布朗_2019.txt

melo_2018.log melo_2019_01.log

韦德_2018.bak 韦德_2019_02.jpg

所有文件都有“_”分隔符,我想根据前缀将文件复制到不同的新目录。例如

lebron_2018.txt lebron_2019.txt 将复制到 \backup\lebron

melo_2018.log melo_2019_01.log 将复制到 \backup\melo

wade_2018.bak wade_2019_02.jpg 将复制到 \backup\wade

我可以通过 cp lebron*.* \backup\lebron 来完成。但能不能通过搜索文件名,并根据文件名自动复制到文件夹中呢?

答案1

@AdminBee 链接帖子中有很多不错的想法,但仅对每个可以glob使用的模式执行循环感觉是正确的。

假设没有空格:

for f in $(ls *_*.txt | cut -d_ -f1 | uniq); do
    mkdir -p ./backup/$f;
    cp $f_*.txt ./backup/$f/;
done

答案2

对于 *nix 系统来说,您的斜线方向错误。只要文件名中没有空格或奇异字符,就应该可以正常工作。

for FILE in *_*.txt ; do
  DIR="/backup/${FILE//_*}"
  mkdir -p "${DIR}" || continue
  mv "${FILE}" "${DIR}"
done

使用 bash 变量扩展从文件中删除名称以创建目录。通过跳过无法创建目录的项目(以防止数据丢失)来确保安全。

相关内容