我试图根据名称(在_之前的前几个字母)对文件进行分组,并使用awk将其移动到单独的目录(如果不存在则创建新目录)。
可以使用以下命令创建测试数据:
echo "1" > 123_20190911_110011.txt
echo "2" > 123_20190911_110012.txt
echo "0" > 123_20190910_110010.txt
echo "1" > 1234_20190911_110011.txt
echo "2" > 1234_20190911_110012.txt
echo "0" > 1234_20190910_110010.txt
ls -ltr的输出是:
-rw-r--r-- 1 vipin vipin 2 Sep 11 23:17 123_20190911_110011.txt
-rw-r--r-- 1 vipin vipin 2 Sep 11 23:17 123_20190911_110012.txt
-rw-r--r-- 1 vipin vipin 2 Sep 11 23:17 123_20190910_110010.txt
-rw-r--r-- 1 vipin vipin 2 Sep 11 23:17 1234_20190911_110011.txt
-rw-r--r-- 1 vipin vipin 2 Sep 11 23:17 1234_20190911_110012.txt
-rw-r--r-- 1 vipin vipin 2 Sep 11 23:17 1234_20190910_110010.txt
在这种情况下,我期望2个目录123和1234和文件移入以下目录:
Dir 123 has files
123_20190911_110011.txt
123_20190911_110012.txt
123_20190910_110010.txt
Dir 1234 has files
1234_20190911_110011.txt
1234_20190911_110012.txt
1234_20190910_110010.txt
下面的代码不起作用。甚至没有创建目录,也没有显示任何错误。
for i in `ls -p | grep -v /` ## to list only files
do
echo $i | awk -F'_' '{mkdir -p $1; cp $i $1}'
done
可以使用以下命令创建目录,但是如何在其中添加move命令?
for i in `ls -p | grep -v / `; do echo $i | awk -F'_' '{print $1; dir= $1}' | xargs mkdir -p ; done
你不应该在里面mv
或cp
里面awk
。以下作品:
for i in * ; do
[ -f "$i" ] || continue
dir_name="$(echo $i | awk -F'_' '{print $1}')"
mkdir -p -- "$dir_name"
cp -- "$i" "$dir_name"
done
但是,awk
可以使用%
bash中的运算符代替,以删除第一个下划线后的所有内容,以获取目录名称。
for i in * ; do
[ -f "$i" ] || continue
dir_name="${i%%_*}"
mkdir -p -- "$dir_name"
cp -- "$i" "$dir_name"
done
(如果不想移动mv
,cp
请使用代替)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句