Bash Shell awk/xargs魔术

adb*_*dbo 4 bash awk xargs

我正在努力学习一点awk foo.我有一个CSV,其中每一行的格式为partial_file_name,file_path.我的目标是找到文件(基于部分名称)并将它们移动到各自的新路径.我想结合find,awk和mv的力量来实现这个目标但是我坚持实施.我想使用awk将术语与csv文件分开,以便我可以执行类似于
find . -name '*$1*' -print | xargs mv {} $2{}
$ 1和$ 2是csv文件中的拆分术语的操作.有人有主意吗?
-和平

bos*_*bos 5

我觉得你在这里搞得很混乱.{}只能用于查找,只能用于一次.即你不能做类似的事情find -name '*.jpg' -exec mv {} {}.png.

做这个:

$ cat korv
foo.txt,/hello/
bar.jpg,/mullo/
$ awk -F, '{print $1 " " $2}' korv
foo.txt /hello/
bar.jpg /mullo/
Run Code Online (Sandbox Code Playgroud)

-F设置分隔符,因此上面将使用","分割.接下来,将*添加到文件名:

$ awk -F, '{print "*"$1"*" " " $2}' korv
*foo.txt* /hello/
*bar.jpg* /mullo/
**
Run Code Online (Sandbox Code Playgroud)

这表明我有一条空行.我们不希望这个匹配,所以我们添加一个规则:

$ awk -F, '/[a-z]/{print "*"$1"*" " " $2}' korv
*foo.txt* /hello/
*bar.jpg* /mullo/
Run Code Online (Sandbox Code Playgroud)

看起来不错,所以使用子shell将所有这些封装到mv:

$ mv $(awk -F, '/[a-z]/{print "*"$1"*" " " $2}' korv)
$
Run Code Online (Sandbox Code Playgroud)

完成.

  • 你可以多次使用`{}`,例如.`找到.-name file -exec mv {} {} .txt \;`有效. (2认同)