![와일드카드를 사용하여 심볼릭 링크 만들기](https://linux55.com/image/24813/%EC%99%80%EC%9D%BC%EB%93%9C%EC%B9%B4%EB%93%9C%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%8B%AC%EB%B3%BC%EB%A6%AD%20%EB%A7%81%ED%81%AC%20%EB%A7%8C%EB%93%A4%EA%B8%B0.png)
동일한 디렉터리 계층 구조를 가진 여러 개의 하드 드라이브가 있습니다. 예를 들면 다음과 같습니다.
/media/sda/dir1
/media/sda/dir2
...
/media/sdb/dir1
/media/sdb/dir2
이름과 디렉터리 이름이 비슷한 두 개의 하드 드라이브. 각 하드 드라이브에 dir1과 dir2에 대한 별도의 심볼릭 링크를 만들고 싶습니다. 내가 찾은 가장 쉬운 방법은 다음을 사용하는 것입니다 cp -sR
.
cp -sR /media/sd*/dir1 /somedir/dir1
cp -sR /media/sd*/dir2 /somedir/dir2
그러나 이렇게 하면 /somedir에 새 디렉터리가 생성되며, 이로 인해 디렉터리 타임스탬프가 쓸모 없게 되는 등 다양한 부작용이 발생합니다.
/media/sd*/dir1 및 /media/sd*/dir2에 대한 dir1 및 dir2라는 심볼릭 링크를 어떻게 생성합니까? 파일은 정기적으로 하드 드라이브에 추가되므로 정기적으로 이러한 명령을 실행해야 합니다.
답변1
/somedir/dir1/*
그러면 에 대한 심볼릭 링크가 생성됩니다 /media/sd*/dir1/*
.
mkdir /somedir/dir1
ln -sf /media/sd*/dir1 /somedir/dir1
파일이나 디렉터리가 여러 파일이나 디렉터리에 존재하는 경우 /media/sd*/dir1/
링크는 마지막 파일이나 디렉터리를 가리킵니다. 예를 들어 다음과 같습니다.
/media/sda1/dir1/Movies
/media/sda1/dir1/Pictures
/media/sdb1/dir1/Movies
/media/sdb1/dir1/Data
당신은 얻을 것이다:
/somedir/dir1/Movies -> /media/sdb1/dir1/Movies
/somedir/dir1/Pictures -> /media/sda1/dir1/Pictures
/somedir/dir1/Data -> /media/sdb1/dir1/Data
그러나 이것이 당신이 원하는 것인지 확실하지 않습니다.
제 생각엔 unionfs
설치가 /media/sd*
심볼릭 링크보다 목적에 더 잘 맞는 것 같습니다.
답변2
다음을 수행할 수 있습니다.
for dir in dir1 dir2
do
[[ ! -d /somedir/$dir ]] && mkdir /somedir/$dir
find /media/sd*/$dir -type f -exec bash -c \
'[[ ! -f /somedir/'$dir'/$(basename $1) ]] && ln -s $1 /somedir/'$dir'/' foo {} \;
done
그러면 /media/sd*/dir1(또는 dir2) 아래에 존재하는 모든 파일을 가리키는 /somedir/dir1/(또는 dir2)에 심볼릭 링크가 생성됩니다. 이 스크립트는 소스 디렉터리 아래에 존재할 수 있는 계층 구조를 유지하지 않습니다.
편집: 모든 링크를 하나의 디렉토리에 두려는 경우 약간 수정된 버전은 다음과 같습니다.
[[ ! -d /somedir/data ]] && mkdir /somedir/data
find /media/sd*/dir[12] -type f -exec bash -c \
'[[ ! -f /somedir/data/$(basename $1) ]] && ln -s $1 /somedir/data/' foo {} \;
done