我有成千上万个带有各种前缀的文件,这些前缀被分组在一个csv列表中。现在,我要根据他们的列表将它们全部移动到他们的文件夹中。
例如:文件A1B1C1 _ {...}。png,A1B2C2 _ {...}。png,A1B1C3 _ {...}。png等。CSV列表:
Name Group
A1B1C1 John
A2B1C1 John
A1B2C2 Denver
A1B1C3 Nick
现在,我想将所有带有A1B1C1_和A2B1C1_前缀的文件移至John文件夹,将A1B2C2_前缀移至Denver文件夹,将A1B1C3_前缀移至Nick文件夹。
我在想
for group in *_*.csv;
do {...}
但是我不确定如何从csv文件中读取列表以及如何从列表语法中移动文件。
我正在使用CentOS,非常感谢。
awk 'NR > 1 { print $1, $2 }' list.csv |
while read -r prefix group; do
find . -type f -name "$prefix*" -exec sh -c '
group="$1"; shift
mkdir -p "$group"
for name do echo mv "$name" "$group"; done' sh "$group" {} +
done
这将用来awk
为while循环提供前缀和组名(跳过列表文件的文件头)。假定所有前缀和组名中都没有空格或制表符。
while循环调用find
以查找当前目录中或目录之下的所有常规文件,这些文件的名称均以给定的前缀开头。对于所有此类文件,将调用以下简短的shell脚本:
group="$1"
shift
mkdir -p "$group"
for name do
echo mv "$name" "$group"
done
该脚本期望组名是命令行上的第一个参数,其余参数是要移至该组目录的文件的路径名。
该脚本在当前工作目录中创建组目录(如果尚不存在),然后循环遍历给定的路径名,将每个文件移到适当的位置。不检查文件是否被覆盖。
该echo
保护mv
的实际运行。运行代码以echo
确保其正常工作,然后删除echo
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句