텍스트 파일 이름을 각 텍스트 파일의 첫 번째 단어로 일괄 바꾸는 방법은 무엇입니까?

텍스트 파일 이름을 각 텍스트 파일의 첫 번째 단어로 일괄 바꾸는 방법은 무엇입니까?

수천 개의 텍스트 파일 이름을 텍스트 파일의 첫 번째 단어와 파일 확장자(.txt)로 바꾸려면 터미널을 사용해야 합니다. 모든 파일은 디렉토리에 있으며 현재 "xx0001.txt"부터 "xx9999.txt"까지의 패턴으로 이름이 지정됩니다.

각 파일의 첫 번째 단어는 "##221251" 패턴입니다. 따라서 파운드 기호를 주석 처리해야 하는 데서 문제가 발생한 것일 수도 있습니다.

나는 시도했다:

rename File.ReadAllText('*.txt').split(' ')[0]

오류가 발생합니다.

zsh: no matches found: File.ReadAllText(*.txt).split( )[0]

도움을 주셔서 미리 감사드립니다. 저는 진짜 초보자입니다.

답변1

단어가 SPC, TAB 또는 NUL로 구분되어 있고 첫 번째 단어가 첫 번째 줄에 있다고 가정하고 다음을 시도해 보세요.

for file (*.txt) {
  read -r word rest < $file && mv -i -- $file $word.txt
}

SPC로만 분할하려면 read로 바꾸십시오 IFS=' ' read.

이 코드가 어떤 언어로 작성되었는지는 모르지만 구문 rename File.ReadAllText('*.txt').split(' ')[0]은 확실히 아닙니다 zsh(내가 아는 다른 쉘의 구문도 아닙니다).

zsh코드가 수행하는 작업을 보다 직접적으로 번역하면 다음과 같습니다.

for file (*.txt) mv -i -- $file ${$(<$file)[1]}

메모리의 전체 파일을 읽고 분할하지만 오류 검사를 많이 수행하지는 않습니다. 분할은 SPC, TAB, NUL 또는 NL에서 이루어지며 첫 번째 줄의 첫 번째로 제한되지 않습니다.

더 빠르게 수행하려면 zmodload zsh/files명령을 mv내장 버전으로 대체하는 사전 실행을 수행할 수 있습니다(호출 시 비용이 많이 드는 포크와 실행 파일을 절약함).

renameperl그 자체는 적어도 1980년대부터 출시된 샘플 프로그램의 이름입니다 . 매개변수는 perl대체 이름을 계산하는 데 사용되는 코드입니다. 모든 시스템에 이 rename명령이 제공되는 것은 아니며 일부 시스템에서는 rename완전히 다릅니다. 당신이 이 사람이라면 rename, perl이렇게 할 수 있습니다:

rename '
  if (open FILE, "<", $_ and my $line = <FILE>) {
    chomp $line;
    my @words = split " ", $line;
    $_ = "$words[0].txt" if @words;
  }' ./*.txt

perl여기에는 내부 내용이 언어 코드 로 그대로 전달되도록 작은따옴표가 사용되었습니다 perl.

*.txt다음으로 변경 *.txt(.)하거나 *.txt(-.)고려해 볼 수도 있습니다.정기적인파일(디렉터리, fifo, 장치 및 기타 비전통적인 유형의 파일 건너뛰기)

답변2

현재로서는 vim다음을 수행합니다(더러워도).

:$!ls *.txt.txt그러면 디렉토리에 있는 모든 파일의 목록이 제공됩니다.

:%norm A `sed 1q < | cut -f1 -d' '`

이는 파일의 첫 번째 단어(또는 공백이 뒤따르는 첫 번째 단어, [보통 같은 것으로 간주됨])를 가져오는 명령 템플릿을 추가하며 빠르게 완료됩니다.... ....

:%norm 0vf yf<p이전에 생성한 목록에서 파일 이름을 가져와서 붙여넣습니다.<

:%norm Imv˽각 줄의 시작 부분에 이동 명령과 공백을 추가합니다.

:w command.sh이것을 chmod +x command.sh전달하고 실행할 수 있는 스크립트 로 저장하세요../command.sh

경고하다:

위생은 전혀 이루어지지 않았습니다. 즉, 파일의 첫 번째 단어가 고유한 이름인지 확인하지 않습니다. 이는 귀하의 지원서에 따라 제공될 수 있지만 일반적으로 그렇지 않습니다. 따라서 파일 이름을 해당 내용의 첫 번째 단어로 바꾸면 파일이 서로 덮어쓰일 수 있습니다. 따라서 이는 권장되지 않습니다.

관련 정보