我一直在努力编写一个shell脚本,我只是难倒了。我在Mac上并且对使用UNIX有一些了解,但我很难过。我有一个文件列表:
folder1_123
folder1_abc
folder2_654
folder2_zxy
我希望他们是这样的:
folder1/123
folder1/abc
folder2/654
folder2/zxy
到目前为止,我已经得到了一个如下所示的脚本:
for file in *_.*; do
dir=${file%%.*}
mkdir -p "$dir"
mv "$file" "$dir"
done
答案 0 :(得分:0)
您可以使用'cut'分割文件/目录名称:
for file in *_*; do
DIRNAME=$(echo $file | cut -d"_" -f1)
if [[ ! -d ${DIRNAME} ]]; then
mkdir ${DIRNAME}
fi
FILENAME=$(echo $file | cut -d"_" -f2)
mv $file ${DIRNAME}/${FILENAME}
done
答案 1 :(得分:0)
循环体是错误的。它应该是:
dir=${file%_*}
newfn=${file#*_}
mkdir -p $dir && mv $file $dir/$newfn
根据您的要求,您可能会或可能不想添加警卫
if [[ -f $file ]]
then
...
fi
围绕这个。
答案 2 :(得分:0)
检查下面的一个班轮脚本是否相同。在包含 _ 格式的所有文件的目录中运行此脚本。它将遍历每个文件名,将在_之前占用第一部分,并将创建一个具有该名称的目录。之后,它将文件从父目录移动到新创建的目录,直到完成所有文件。
for i in `ls |grep _`;do mkdir -p `echo $i|cut -f1 -d "_"`;mv $i `echo $i|cut -f1 -d "_"`/`echo $i|cut -f2 -d "_"`;done