Unix: 텍스트 파일에 나열된 디렉터리 파일 이름을 찾아 새 디렉터리로 이동

Unix: 텍스트 파일에 나열된 디렉터리 파일 이름을 찾아 새 디렉터리로 이동

저는 Mac OS X의 터미널에서 다음을 수행하는 데 적합한 명령을 찾으려는 명령줄 초보자입니다.

모든 파일을 동일한 디렉토리에 배치했고 텍스트 파일에 나열된 선택된 디렉토리 파일 세트를 분리하여 새 디렉토리로 이동하고 싶다고 가정하면 어떻게 해야 합니까?

  • .txt 파일에 나열된 선택한 파일 이름 목록을 읽습니다.

  • 파일 이름으로 일치하는 모든 항목 찾기

  • 일치하는 모든 파일을 격리하고 새 디렉터리로 이동합니다.

현재 디렉터리에서 filesring.filetype(또는 둘 다)을 찾고 일치하는 모든 항목을 새 디렉터리로 이동하는 다음 명령을 찾았습니다.

find . -type f -iname "filestring.filetype" -print0 |
  xargs -0 -J % mv % ~/NewDirectory/

이 명령을 찾았 tar지만 나열된 모든 파일 이름의 보관된 복사본을 생성합니다.filename.txt

tar -cf - -T filename.txt | (cd /path/to/new/dir && tar -xvf -)

어떤 도움이라도 대단히 감사하겠습니다!

다음 솔루션은 신뢰할 수 있는 소스에서 제공됩니다.

cat "filename.txt" | xargs -I % mv % ~/NewDirectory/

답변1

이것을 시도해 볼 수 있습니다. 배쉬와 함께 사용됩니다.

while read file
do
    mv -v -i "$file" ~/NewDirectory/
done < listoffiles.txt

답변2

귀하가 제안한 솔루션은 Mac OS X 10.6.8에서 find ... xargs작동합니다 .Bash version 3.2.48(1)-release

mkdir -v -p ~/NewDirectory
find . -type f -maxdepth 1 -iname "*.pdf" -print0 |
   xargs -0 -J % mv -i -v % ~/NewDirectory

이동하려는 파일의 전체 경로가 포함된 텍스트 파일을 사용하는 경우 텍스트 파일에 저장된 각 파일 경로가 null 바이트로 끝나는지 확인하세요. 이렇게 하면 파일 경로에 줄 바꿈이 있어도 나중에 걱정할 필요가 없습니다.

# some tests
mkdir -v -p ~/NewDirectory
find "${PWD}" -type f -maxdepth 1 -print0 > listoffiles.txt
xargs -0 -n 1 ls -l <listoffiles.txt
# use a grep regex filter on file paths
grep -az 'bash' listoffiles.txt | xargs -0 -n 1 ls -l  
xargs -0 -n 1 sh -c 'echo mv -v -i "$1" ~/NewDirectory' _ <listoffiles.txt
xargs -0 -J % ls -ld % ~/NewDirectory <listoffiles.txt
xargs -0 -J % mv -i -v % ~/NewDirectory <listoffiles.txt

사용 중인 코드를 디버그하려면 다음을 수행하세요 Bash.

#help set
set -Eeuxv -o pipefail +H   # for debugging
trap 'printf "%s\n" "$?"; trap - EXIT' EXIT HUP INT QUIT PIPE TERM ERR

관련 정보