+ -
当前位置:首页 → 问答吧 → 求一个筛选文件夹的shell或者批处理,谢谢

求一个筛选文件夹的shell或者批处理,谢谢

时间:2011-03-30

来源:互联网

本帖最后由 cocke 于 2011-03-30 18:59 编辑

我有一个文本name.txt,内容如下:
1.txt, one
2.txt ,one
3.txt ,two
11.txt ,three
5.txt ,four
现在想做的是,在本目录下生成one文件夹并将1.txt,2.txt移动到one目录里;
生成two目录,并将3.txt移到two目录里,生成three目录,将11.txt移动到three目录中;生成four目录,将5.txt移动到four目录中。
name.txt里面的内容以逗号为分割符,请各位帮忙,谢谢!

作者: cocke   发布时间: 2011-03-30

try:
  1. [20:04:56-Bob@hzling20:~/tmp/1]-(1320)No.319->$ cat name.txt
  2. 1.txt, one
  3. 2.txt ,one
  4. 3.txt ,two
  5. 11.txt ,three
  6. 5.txt ,four

  7. [20:05:00-Bob@hzling20:~/tmp/1]-(1321)No.320->$ for i in `awk -F' *, *' '{print $2}' name.txt | uniq`; do mkdir $i && cd $i && touch `grep $i ../name.txt | awk -F' *, *' '{print $1}'` && cd ..; done

  8. [20:05:06-Bob@hzling20:~/tmp/1]-(1322)No.321->$ tree
  9. .
  10. |-- four
  11. |   `-- 5.txt
  12. |-- name.txt
  13. |-- one
  14. |   |-- 1.txt
  15. |   `-- 2.txt
  16. |-- three
  17. |   `-- 11.txt
  18. `-- two
  19.     `-- 3.txt

  20. 4 directories, 6 files
复制代码

作者: xiaopan3322   发布时间: 2011-03-30

简单地写写就这样子吧。可以工作。
  1. #!/bin/bash
  2. for dirname in $(awk 'BEGIN{FS=","}{print $2}' name.txt)
  3. do
  4.         mkdir $dirname >/dev/null 2>&1
  5.         awk -v dir=$dirname 'BEGIN{FS=","}{if($2==dir)system("mv "$1" "dir)}' name.txt
  6. done
复制代码

作者: L_kernel   发布时间: 2011-03-30

刚没看清楚,那些txt文件是存在的?如果存在的话,就把touch那句改成mv

作者: xiaopan3322   发布时间: 2011-03-30