LINUX : 한 디렉토리에서 다른 디렉토리로 모든 파일 연결 [닫기]


123

나는 (연결할 ln -s에있는 모든 파일) /mnt/usr/lib//usr/lib/

파일이 많은데 어떻게 빨리 처리 할 수 ​​있습니까? :)


"많은"파일은 몇 개이며 "빠른"것으로 간주하는 속도는 얼마나됩니까?
Eric Smith

4
이것은 "serverfault"또는 "superuser"에 적합하든 50:50이지만 프로그래밍이 아니므로 stackoverflow에 적합하지 않습니다.
Marc Gravell

답변:


202
ln -s /mnt/usr/lib/* /usr/lib/

그래도 이것은 수퍼 유저에게 속합니다.


6
이것은 숨겨진 파일을 포함하지 않으며 전체 디렉토리를 연결합니다. 이 중 하나가 원하는 것이 아니면 내 대답을 참조하십시오. 그렇지 않으면 가장 짧은 방법입니다.
Cascabel

네가 옳아. 그러나 라이브러리는 일반적으로 숨겨지지 않습니다. 어쨌든 도트 파일이 관련되어 솔루션이 더 편리합니다.

1
영구적으로 다른 폴더를 가리 킵니까?
nmkyuppie

@YuPPie 내가 생각하기에 디렉토리의 모든 파일에 대한 하드 링크를 생성합니다. (이것이 내가 오늘 원했던 것이므로 +1 : D)
표시 이름

2
@SargeBorsch 심볼릭 링크를 생성합니다 (하드 링크는 다릅니다).
jsejcksn

90

GNU cp에는 복사하는 대신 심볼릭 링크를 만드는 옵션이 있습니다.

cp -rs /mnt/usr/lib /usr/

이것은 POSIX에서cp 찾을 수없는 GNU 확장 입니다.


4
현재 디렉토리가 심볼릭 링크 이런 식으로 만들는 / usr /해야
Soul_man

@caf 대상이 기존 폴더 인 경우 / usr / 폴더에 lib 폴더가 생성됩니다
Tamil Selvan C

2
좋은 대답입니다. -s 대신 -l을 사용하여 하드 링크를 만드는 데 사용할 수도 있습니다.
팩스 :


15

게시 된 솔루션은 숨겨진 파일을 연결하지 않습니다. 포함하려면 다음을 시도하십시오.

cd /usr/lib
find /mnt/usr/lib -maxdepth 1 -print "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done

디렉토리를 재귀 적으로 만들고 파일 만 연결하려면 (디렉토리 내에 파일을 만들면 실제로 /usr/libnot에 있습니다 /mnt/usr/lib) 다음과 같이 할 수 있습니다.

cd /usr/lib
find /mnt/usr/lib -mindepth 1 -depth -type d -printf "%P\n" | while read dir; do mkdir -p "$dir"; done
find /mnt/usr/lib -type f -printf "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done

2
bash에서 확장 된 globbing을 켠 경우 숨겨진 파일에서 와일드 카드를 사용하는 방법으로도 작동해야한다고 생각합니다. 점으로 시작하는 모든 것과 그 뒤에 아무것도없는 점 또는 다른 점 (예 : ./and 제외 ../)이 뒤 따르는 모든 항목과 일치합니다 .ln -s /mnt/usr/lib/.!(|.)* /usr/lib
Cascabel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.