파일 콘텐츠를 매개변수로 여러 번 사용

파일 콘텐츠를 매개변수로 여러 번 사용

.txt디렉터리에 존재하는 여러 파일의 이름(전체 경로 이름이 아님)이 포함된 텍스트 파일이 있습니다. 각 파일에는 삭제하려는 다른 파일에 대한 (전체) 경로가 있습니다.

list.txt텍스트 파일의 이름을 가진 ""라는 파일이 있다고 가정해 보겠습니다.

pathtodelete1.txt
pathtodelete2.txt
something else that is the same as pathtodelete.txt

이러한 각 파일에는 내부적으로 저장된 경로가 있습니다 pathtodelete1.txt./directory/randomfilename.txt

나는 xargs성공하지 못한 채 다양한 조합을 시도했습니다.

답변1

제한된 테스트에서 이것은 나에게 효과적이었습니다.

cat list.txt | xargs cat | xargs rm

파일을 삭제하는 데 사용하므로 먼저 비파괴적인 명령을 사용하여 테스트해 볼 수 있습니다.

cat list.txt | xargs cat | xargs echo

답변2

while read TXT; do head -1 $TXT | xargs rm; done < list.txt

답변3

echo이 스크립트는 원하는 작업을 수행해야 합니다. 실행에 대한 보고서를 보고 싶지 않으면 이러한 문을 주석 처리하거나 완전히 무시할 수 있습니다.

원하는 대로 작동한다고 만족스러우면 :문의 시작 부분부터 삭제하면 실제로 지정된 파일이 삭제됩니다.rm

#!/bin/bash
# Look in list.txt for files containing items to delete
while IFS= read -r file
do
    echo "Considering $file" >&2

    # Read the path to delete from the file
    path="$(cat "$file" 2>/dev/null)"

    # If it looks like a pathname try to delete it
    if [[ "$path" =~ ^/ ]] && [[ -f "$path" ]]
    then
        echo "> $path" >&2
        : rm -f "$path"
    fi
done <list.txt

관련 정보