我目前正在尝试组织数千个文件,这些文件根据其中的内容进行命名,并且各种“标签”(如果您愿意)用空格分隔。因此,例如:
foo_bar bar_foo.txt
我对 Linux/Unix 比较陌生,想知道是否有一种方法可以迭代每个文件,根据标签创建文件夹,并将文件复制到这些文件夹?
所以我们最终会得到:
./foo_bar bar_foo.txt
./foo_bar/foo_bar bar_foo.txt
./bar_foo/foo_bar bar_foo.txt
到目前为止,我一直在手动执行以下操作:
mkdir foo_bar
cp *foo_bar* foo_bar/
mkdir bar_foo
cp *bar_foo* bar_foo/
...
显然,这非常浪费时间,所以我只是在寻找一种自动执行此操作的方法。
编辑:更多示例:
输入:
./a b c d.txt
./b a d.txt
./c d e.txt
./d a.txt
输出:
All original files still in parent directory, plus:
./a/a b c d.txt
./a/b a d.txt
./a/d a.txt
./b/a b c d.txt
./b/b a d.txt
./c/a b c d.txt
./c/c d e.txt
./d/a b c d.txt
./d/b a d.txt
./d/c d e.txt
./d/d a.txt
./e/c d e.txt
答案1
试试这个..删除回显..如果您对命令感到满意...
ls * | awk '{print $1}' | sort -u | while read a; do echo mkdir -p $a; echo mv ${a}*txt ${a}; done
修改后的答案
$ ls
a b c d.txt b a d.txt c d e.txt d a.txt
$ ls * | sed "s/.txt//;s/ /\n/g" | sort -u | while read file; do echo mkdir -p $file; echo mv *${file}*.txt ${file}; done
mkdir -p a
mv a b c d.txt b a d.txt d a.txt a
mkdir -p b
mv a b c d.txt b a d.txt b
mkdir -p c
mv a b c d.txt c d e.txt c
mkdir -p d
mv a b c d.txt b a d.txt c d e.txt d a.txt d
mkdir -p e
mv c d e.txt e
笔记:因为您希望该文件存在于原始目录中..使用CP代替MV