폴더의 각 파일에 대한 bash 명령


31

동일한 명령을 적용하려는 파일 세트가 있으며 출력에는 처리 된 파일과 이름이 같지만 확장자가 달라야합니다.

현재 /my/data/Andrew.doc의 이름을 /my/data/Andrew.txt로 바꾸고 있습니다. / my / data / 폴더의 모든 .doc 파일에 대해이 작업을 수행하고 이름을 유지하고 싶습니다.

여러 버전을 시도했지만 Linux를 처음 접했을 때 구문에 문제가 있다고 생각합니다.


→ 좀 더 완전하고 실용적인 예 : stackoverflow.com/a/43474757/444255
Frank Nocke

답변:


76

이에 접근하는 방법은 적어도 1 억 가지가 있지만 최고의 경쟁자들은 다음과 같습니다.

배쉬 for 루프

for f in ./*.doc; do
    # do some stuff here with "$f"
    # remember to quote it or spaces may misbehave
done

사용 find

find명령은 예쁜이 exec(몇 가지주의로) 일을 실행하기위한 위대한 명령을 사용합니다. 선택한 파일을 실제로 필터링 할 수 있으므로 찾기는 기본 글 로빙보다 낫습니다. 이상한 구문에주의하십시오.

find . -iname '*.doc' -exec echo "File is {}" \;

참고 find사용할 수 있도록 재귀 -maxdepth 1유지하기 위해 find현재 작업 디렉토리에. -type f일반 파일을 필터링하는 데 사용할 수 있습니다.

문서 이름 을 txt로 바꾸는 경우 ...

rename명령은 나오지-처럼되어 검색에. 분명히 이것은 형식을 변환하기 위해 아무것도하지 않습니다.

rename 's/doc$/txt/' *.doc

22
for i in *.doc ; do mv "$i" $(echo $i | sed s/doc/txt/) ; done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.