在unix中编写循环以进入子目录文件夹,然后复制并重新标记文件夹名称
亲爱的飞越者: 我在编写一个循环时遇到问题,该循环进入一个包含多个文件夹、副本和 重新标记每个文件夹的名称。每个文件夹的开始标记方式相同,后面跟着不同的数字, 因此,结构是:在unix中编写循环以进入子目录文件夹,然后复制并重新标记文件夹名称,unix,Unix,亲爱的飞越者: 我在编写一个循环时遇到问题,该循环进入一个包含多个文件夹、副本和 重新标记每个文件夹的名称。每个文件夹的开始标记方式相同,后面跟着不同的数字, 因此,结构是: groupfolder1 123456789_ab_1234 123456789_ab_1235 123456789_ab_1236 123456789_ab_1237 groupfolder2 123456789_cd_1310 123456789_cd_
groupfolder1
123456789_ab_1234
123456789_ab_1235
123456789_ab_1236
123456789_ab_1237
groupfolder2
123456789_cd_1310
123456789_cd_1321
123456789_cd_1322
123456789_cd_1323
我想进入每个groupfolder(例如,123456789_ab_1234)并创建一个具有相同内容但带有标签的新文件夹(例如,sub-1234)
我一直在尝试学习Unix,但我正在努力从完成抽象练习过渡到实际问题,因此非常感谢您的回答和对如何找到解决方案的任何解释
如果我知道你想要这样的东西
for d in *
do
if test -d $d
then
mkdir /tmp/sub-$d
(cd $d ; tar cf - .) | (cd /tmp/sub-$d ; tar xf -)
mv /tmp/sub-$d $d/.
fi
done
上面我假设您已经在groupfolder1中了
我不知道你的所有目录都是怎样的,也许你可以添加一个嵌入循环,从包含groupfolder1/groupfolder2等的父级开始,然后像这样自动进入它们:
for dd in *
do
if test -d $dd
then
cd $dd
for d in *
do
if test -d $d
then
mkdir /tmp/sub-$d
(cd $d ; tar cf - .) | (cd /tmp/sub-$d ; tar xf -)
mv /tmp/sub-$d $d/.
fi
done
cd ..
fi
done
woops把这个贴错了地方。谢谢你的解释 我试过这个: cd/media/Eunice/“驱动器B”/groupfolder1/ 为d-in* 做 如果测试-d$d 然后 mkdir/tmp/sub-$d (cd$d;焦油cf-)|(cd/tmp/sub-$d;焦油xf-) mv/tmp/sub-$d$d/。 fi 完成 并收到了这个错误。 mkdir:无法创建目录“/tmp/sub-123456789_ab_1234”:没有这样的文件或目录 -bash:cd:/tmp/sub-123456789_ab_1234:没有这样的文件或目录
我担心这里的“d”指的是文件夹“123456789_ab_1234”,为了创建新文件夹,我需要在“123456789_ab_”之后添加数字,以便为新文件夹(如sub-1234)创建标签。有没有一种方法可以轻松地将“d”识别为“1234”亲爱的布鲁诺,谢谢你的回复。非常感谢。对于您的第一个代码。检查一下,“test-d$d”这行是什么意思。行“(cd$d;tar cf-)|(cd/tmp/sub-$d;tar xf-)是可选的吗?@Eunice
test-d$d
checks$d是一个目录,在*中d的将在所有元素上迭代,因此files@Eunice(cd$d;tar cf-)|(cd/tmp/sub-$d;tar xf-)
不能是可选的,这是执行您请求的复制的行