리눅스 명령줄. 일부 파일과 디렉터리를 제외한 모든 파일을 디렉터리로 이동합니다.

리눅스 명령줄. 일부 파일과 디렉터리를 제외한 모든 파일을 디렉터리로 이동합니다.

파일과 디렉터리가 포함된 폴더가 있는데 이 모든 파일과 디렉터리를 , 및 를 제외한 다른 A폴더로 이동하고 싶습니다 .Bfilefile2directorydirectory2

이것이 어떻게 달성될 수 있습니까?

답변1

그리고 zsh:

setopt extendedglob # best in ~/.zshrc
mv A/^(file|directory)(|2)(D) B/

( (D)포함하다가리키다(숨겨진) 파일).

그리고 bash:

shopt -s extglob dotglob failglob
mv A/!(@(file|directory)?(2)) B/

그리고ksh93

(FIGNORE='@(.|..|@(file|directory)?(2))'; mv A/* B)

답변2

내가 평소에 하는 일

cd A
ls > a

("a" 파일이 없다고 가정).

vi a

보관하려는 파일이나 디렉터리를 삭제하세요.

mv $(<a) B

답변3

find제외된 표현식과 함께 사용할 수 있습니다 .

find . ! -name . -prune ! -path ./file \
                        ! -path ./file2 \
                        ! -path ./directory \
                        ! -path ./directory2 \
     -exec mv {} your_destination \;

이 솔루션은 다음에서 영감을 얻었습니다.이 문제.

답변4

./A및 가 ./B동일한 파일 시스템에 있는 경우그리고해당 파일이 다음 위치에 아직 없는 경우 ./B:

file file2 directory directory2

...이 작업은 원자적이어야 합니다.

cd ./A; mv * ../B
for mv in file file2 directory directory2
do mv ../B/"$mv" .
done

그렇지 않다면 다음이 있습니다.적어도위의 명령 세트를 사용하여 8개의 추가 장치 간 복사본을 완료합니다.

관련 정보