특정 수의 파일을 다른 디렉토리로 이동하거나 복사하는 방법

특정 수의 파일을 다른 디렉토리로 이동하거나 복사하는 방법

특정 개수의 파일을 다른 디렉터리로 이동하거나 복사하는 방법을 알고 싶습니다.

예: 디렉터리에 880개의 파일이 있고 150개의 파일을 to 디렉터리에서 이동하거나 복사 A하려는 경우 150~300개의 파일을 to 디렉터리에서 이동하거나 복사 합니다 .ABAC

나는 이 명령을 시도했다

$ find . -maxdepth 1 -type f | head -150 | xargs cp -t "$destdir"

하지만 이것은 880개의 파일을 디렉토리에 복사하는 것입니다.B

답변1

150개 파일에 대한 가능한 솔루션 mv:

mv `find ./ -maxdepth 1 -type f | head -n 150` "$destdir"

mv사본 으로 대체합니다 cp.

테스트 사례는 다음과 같습니다.

mkdir d1 d2
cd d1
touch a b c d e f g h i j k l m n o p
cd ../
mv `find ./d1 -type f | head -n 5` ./d2/

결과:

ls d1 d2
d1:
b  c  d  e  g  h  i  k  m  n  o

d2:
a  f  j  l  p

편집하다:

귀하의 의견에 답변하는 간단한 스크립트는 다음과 같습니다.

#!/bin/sh
# NOTE: This will ONLY WORK WITH mv.
# It will NOT work with cp.
#
# How many files to move
COUNT=150
# The dir with all the files
DIR_MASTER="/path/to/dir/with/files"
# Slave dir list - no spaces in the path or directories!!!
DIR_SLAVES="/path/to/dirB /path/to/dirC /path/to/dirD"

for d in $DIR_SLAVES
do
    echo "Moving ${COUNT} to ${d}..."
    mv `find ${DIR_MASTER} -maxdepth 1 -type f | head -n ${COUNT}` "${d}"
done

exit

참고: 샘플 스크립트는 테스트되지 않았지만 작동할 것입니다.

답변2

쉘이 이를 지원하는 경우 process substitution다음을 시도할 수 있습니다.

처음 150개의 파일은 destdir_B에 복사되고 다음 300개의 파일은 destdir_C에 복사됩니다. 나머지는 변경되지 않습니다.

{
   head -n 150 | xargs -t cp -t "$destdir_B"
   head -n 300 | xargs -t cp -t "$destdir_C"
} <(find . -maxdepth 1 -type f)

이는 외부 파일 이름을 처리할 수 없다는 일반적인 경고와 함께 제공됩니다.

<(...)가 없으면 찾기 결과를 파일에 저장한 다음 해당 파일을 {...}로 리디렉션할 수 있습니다.

화타이

관련 정보