我在一个文件夹中有一组文件,我根据文件本身移动到子文件夹中。文件格式为:
Name_metadata_metadata_File.ext
使用这行代码:
for i in `ls | grep _`; do
mkdir -p `echo $i | cut -f1 -d "_"`
mv $i `echo $i | cut -f1 -d "_"`/`echo $i | cut -f5 -d "_"`
mv $i `echo $i | cut -f1 -d "_"`/`echo $i | cut -f4 -d "_"`
done
我已成功将其转换为文件夹结构:
名称/文件.ext
我现在有一些文件(Name_str_metadata_metadata_File.ext)中有一个额外的字符串,我想把它们清除掉。我遇到了在我的代码行中添加 if 语句的问题:
for i in `ls | grep _`; do
mkdir -p `echo $i | cut -f1 -d "_"`
if `echo $i | cut -f2 -d "_"` == "str"; then
mv $i `echo $i | cut -f1 -d "_"`/`echo $i | cut -f5 -d "_"`
else
mv $i `echo $i | cut -f1 -d "_"`/`echo $i | cut -f4 -d "_"`
fi
done
我是否写错了 if 语句?
不要有意识地解析 的输出ls
,请参阅BashFAQ - 为什么您不应该解析 ls(1) 的输出,它可能会以多种方式出错。使用 shell 支持的内置 glob 扩展
for file in *_*; do
[ -f "$file" ] || continue
mkdir -p "${file%%_*}" || { printf 'error creating dir\n' >&2; exit 1; }
mv "$file" "${file%%_*}/${file##*_}"
done
的"${file%%_*}
和${file##*_}"
是参数扩展syntices用于从给定的分隔符的单词,在这种情况下是提取最早的和最远的字符串_
。请参阅Bash - 参数扩展 - 子字符串删除
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句