답변:
사용 xargs
:
xargs rm < file # or
xargs -a file rm
그러나 파일 이름 / 경로에 이스케이프 해야하는 문자가 포함되어 있으면 작동하지 않습니다.
파일 이름에 줄 바꿈이 없으면 다음을 수행하십시오.
tr '\n' '\0' < file | xargs -0 rm # or
xargs -a file -I{} rm {}
또는 다음 스크립트를 작성할 수 있습니다.
#!/bin/bash
if [ -z "$1" ]; then
echo -e "Usage: $(basename $0) FILE\n"
exit 1
fi
if [ ! -e "$1" ]; then
echo -e "$1: File doesn't exist.\n"
exit 1
fi
while read -r line; do
[ -n "$line" ] && rm -- "$line"
done < "$1"
로 저장하고 /usr/local/bin/delete-from
실행 권한을 부여하십시오.
sudo chmod +x /usr/local/bin/delete-from
그런 다음 다음을 실행하십시오.
delete-from /path/to/file/with/list/of/files
cat file
(ba) sh 또는 csh의 "rm- "만 가능합니다.
cat
는 방금 언급했듯이 유용하지 않습니다 stdin
! 그의 업데이트 된 답변을보십시오
공백, 백 슬래시 및 기타 이상한 문자가있는 파일 이름을 처리 할 수있는 한 가지 방법이 있습니다.
while read -r file; do rm -- "$file"; done < list.txt
그러면의 각 줄을 읽고 다른 list.txt
이름으로 저장 $file
하고 실행 rm
합니다. -r
(그 때문에 백 슬래시 문자 그대로 읽어되도록 \t
일치 \
하고 t
아닌 탭). 로 --
시작하는 파일 이름도 처리합니다 -
.
Perl에서도이를 수행 할 수 있습니다.
perl -lne '$k{$_}++; END{unlink for keys(%k)}' list.txt
이것은 각 파일 이름을 %k
해시 로 읽은 다음이를 사용 unlink
하여 각 파일 이름 을 삭제합니다.
파이썬을 통해.
import sys
import os
fil = sys.argv[1]
with open(fil) as f:
for line in f:
os.remove(line.rstrip('\n'))
위의 스크립트를 like라는 파일에 저장 한 script.py
다음 터미널에서 아래 명령을 실행하여 스크립트를 실행하십시오.
python3 script.py file
file
실제로 제거하려는 파일의 경로가 저장되는 입력 파일입니다.
이를 수행하는 다른 방법 :
쉘 스크립트를 만들어 파일을 '준비'할 수 있습니다.
$ sed -E "s/^(.*)$/rm '\1'/" input_file
rm 'file1'
rm 'file2'
rm 'file with some spaces.ext'
파일 이름에 작은 따옴표 ( '
) 가있는 경우이 약간 확장 된 버전을 사용하여 먼저 이스케이프 할 수 있습니다.
$ sed -E "s/'/'\\\''; s/^(.*)$/rm '\1'/" input_file
rm 'file1'
rm 'file2'
rm 'file with some spaces.ext'
rm 'a file with "quotes"'
rm 'a file with '\''quotes'\'''
그리고 이것을 파이프로 연결하여 실행할 수 있습니다 sh
.
$ sed -E "s/'/'\\\''; s/^(.*)$/rm '\1'/" input_file | sh
내가 이해하는 것처럼 전체 경로가있는 파일이있는 텍스트 파일이 있습니다. 두 가지 가능성이 있습니다.
목록에는 줄 바꿈으로 구분 된 파일 이름이 있습니다. 즉, 각 줄에는 파일의 전체 경로가 있습니다. 이 경우 간단한 방법은 다음과 같습니다.
for i in $(cat listOfFiles.txt); do
rm -f $i
done
목록에 공백 또는 탭으로 구분 된 하나 이상의 파일 이름 행이있는 경우 다음은 드릴입니다.
sed -i 's/\s\+/\n/g' listOfFiles.txt
이것은 모든 공백을 개행으로 변환합니다
for i in $(cat listOfFiles.txt); do
rm -f $i
done
예, 많은 방법이 있지만 매우 간단한 방법입니다.
cat
필수는 아닙니다stdin
. 리디렉션 을 사용할 수 있습니다 .< file xargs rm