저는 현재 내용에 따라 이름이 지정되고 공백으로 구분된 다양한 "태그"가 있는 수천 개의 파일을 정리하려고 합니다. 예를 들면 다음과 같습니다.
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
노트:파일이 원래 디렉토리에 존재하기를 원하므로 ..useCP바꾸다MV