gpt4 book ai didi

linux - 从文件名创建目录并移动 bash

转载 作者:IT王子 更新时间:2023-10-29 00:51:47 26 4
gpt4 key购买 nike

我有一大堆文件

BR0200.aaa.tsv
BR0200.bbb.tsv
BR0200.ccc.tsv
BR0210.aaa.tsv
BR0210.bbb.tsv
BR0210.ccc.tsv
W0210.aaa.tsv
W0210.aaa.tsv
W0210.aaa.tsv

我想根据文件名的第一部分到第一个 '.' 创建一系列目录

BR0200
BR210
W0210

然后将相关文件移动到正确的目录(即所有 BR0200.* 文件到 BR0200 目录)。

我试过 bash 脚本,但总是出错。如有任何建议,我们将不胜感激。

#!/bin/bash

for file in BR* W0*; do
dir = "${file%%.*}"
if [-e $dir];then
mv "$file" "$dir"
else
mkdir -p "$dir"
mv "$file" "$dir"
fi
done

抱歉,如果这是一个基本问题。我尝试在网上搜索,但没有结果。

最佳答案

赋值中 = 周围不允许有空格。

dir="${file%%.*}"

相反,测试中需要空格。

if [ -e $dir ]; then
^ ^

就文体改进而言,执行不必要的 mkdir -p 并没有坏处,因此您可以摆脱 if 语句。

作业中不需要引号,因此您可以将它们从 dir= 行中删除。不过在其他任何地方引用都是个好主意,所以不要删除其他引号。

向 for 循环添加额外的 .* 可能会更好。这样,如果您多次运行该脚本,它就不会尝试移动那些新创建的子目录。一个巧妙的技巧(虽然不一定是改进)是将 BR*.* W0*.* 缩短为 {BR,W0}*.*.

for file in {BR,W0}*.*; do
dir=${file%%.*}
mkdir -p "$dir"
mv "$file" "$dir"
done

关于linux - 从文件名创建目录并移动 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13020720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com