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


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.