연말에만 디렉토리 구조 복사


1

새해 복 많이 받으세요. 이에 대한 해결책이 있지만 복사하려는 디렉토리에 있지 않으면 작동하지 않습니다.

2018 년 말에 2018 /라는 다양한 폴더의 디렉토리 구조 만 2019 /에 복사하고 싶습니다.

cd 2018/
find . -type d -exec mkdir -p ../2019/{} \;

그리고 이것은 작동합니다. 기본 디렉토리에서 어떻게합니까?

find 2018 -type d -exec basename {} \;

폴더 이름을 알려 주지만

find 2018 -type d -exec mkdir 2019/`basename {}` \;

여전히 2018 폴더를 2019 폴더로 복사하면 디렉토리 트리가 느슨해집니다.

여러 번 검색 한 후 간단한 답변을 찾을 수 없습니다. 어떤 아이디어?

편집 모든 도움과 제안을 주셔서 감사합니다. 이것은 궁극적으로 저에게 가장 효과적이었습니다.

find 2018/* -type d | sed 's/^2018//g' | xargs -I {} mkdir -p 2019"/{}"


감사합니다 @Paulo : 그것은 내가 찾고있는 한 줄 답변이 있습니다. stackoverflow.com/a/30646398/2709804
smilingfrog

답변:


1

이 트릭을 수행해야합니다.

for FOLDER in `ls -l 2018/|grep '^d'|awk '{print $9}'`; do mkdir -p 2019/$FOLDER; done

또는

for FOLDER in `find 2018 -type d -exec basename {} \;|grep -v 2018`; do mkdir -p 2019/$FOLDER; done

이게 도움이 되길 바란다.


첫 번째 버전이 작동합니다. 감사. 두 번째는 트리 구조를 무너 뜨리지 않고 모든 하위 디렉토리를 2019 /에 넣습니다.
smilingfrog

두 번째 옵션이 작동하지 않아 이상합니다. 어쨌든 나는 그것이 당신을 위해 일하게되어 기쁘다. 다른 사람을 도울 수 있도록 답변을 올바른 것으로 숨기십시오.
마누엘 플로리안


1

mtree를 가지고 있다면 다음과 같이 할 수 있습니다 :

$ mkdir 2019
$ mtree -cdp 2018 | mtree -Up 2019

mtree가없는 경우 Ubuntu 16.04.5 LTS의 GitHub 에서 Archie Cobbs의 mtree 포트 를 설치하는 방법은 다음과 같습니다.

$ mkdir work; cd work
$ # adjust this URL to match the desired version from the GitHub page
$ wget https://s3.amazonaws.com/archie-public/mtree-port/mtree-1.0.4.tar.gz
$ tar xf mtree-1.0.4.tar.gz
$ cd mtree-1.0.4
$ cat README
mtree - Utility for creating and verifying file hierarchies

This is a port of the BSD mtree(1) utility.

See INSTALL for installation instructions.

See COPYING for license.

See CHANGES for change history.

Enjoy!

$ cat INSTALL

Simplified instructions:

    1. Ensure you have the following software packages installed:

        libopenssl-devel

    2. ./configure && make && sudo make install

Please see

    https://github.com/archiecobbs/mtree-port

for more information.

$ # I already had openssl installed in my Ubuntu VM, so I forged ahead:
$ ./configure
...
$ make
...
$ sudo make install
$ man mtree
...
$ which mtree
/usr/bin/mtree

저자가 언급 한 OpenSSL 패키지 이름은 지침이 작성된 이후 변경되었을 수 있습니다. 내 시스템에서 libssl-dev는 SHA256 등을 지원하는 mtree를 빌드하는 데 필요한 패키지였습니다.

HTH,


우분투에 mtree를 설치하는 방법을 볼 수 없습니다.
smilingfrog

1
@smilingfrog mtree를 Linux로 포팅하기 위해 Archie Cobbs의 GitHub 프로젝트를 찾은 후 Ubuntu 16 설치 지침으로 답변을 업데이트했습니다.
Jim L.

0

다만:

cd 2018/
find * -type d -exec mkdir -p ../2019/{} \;

'.'대신 '*'사용 2018 디렉토리 자체를 선택하지 마십시오.

디렉토리로 cd하지 않으면 디렉토리 목록을 배열로 가져 와서 mkdir 명령에서 연도를 대체합니다. 예를 들면 다음과 같습니다.

# get list into an array, names can have spaces.
IFS=$'\r\n' dirs=($(find /some/path/2018/* -type d))
let i=0
while [ $i -lt ${#dirs[*]} ]; do
  mkdir -p "${dirs[$i]/2018/2019}"
  let i=i+1
done

찾기 위해 +1 *; 나는 그것이 옵션이라는 것을 몰랐다. 그러나 이것은 작업 스크립트와 동일하며 디렉토리로 변경하지 않고 수행하는 방법을 알아 내려고 노력 중입니다.
smilingfrog

이것을 달성하는 방법을 추가했습니다.
tonioc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.