모든 사용자의 .bash_history 파일을 내 홈 디렉터리에 어떻게 복사합니까?

모든 사용자의 .bash_history 파일을 내 홈 디렉터리에 어떻게 복사합니까?

나는 루트로 실행 중입니다. 시스템 .bash_history 파일의 모든 사용자를 내 홈 디렉터리로 복사하고 싶습니다. 이 작업을 수행하여 모든 명령을 하나로 병합할 수 있지만 누구 명령이 누구인지 알 수 없습니다.

find /home/ -maxdepth 2 -iname ".bash_history" -type f -exec cat {} >> ~/combined.txt \;

파일의 각 파일 사이에 사용자 이름을 넣거나 combined.txt다음과 같은 구조로 파일을 복사하고 싶습니다.

~/user-bash/john.txt
~/user-bash/mary.txt
~/user-bash/bob.txt
~/user-bash/larry.txt
~/user-bash/root.txt

이 중 하나(또는 둘 다)를 어떻게 구현할 수 있나요?

답변1

zsh에서는 다음을 사용하십시오.zmv:

autoload zmv; alias zcp='zmv -C'  # this can go into your .zshrc
zcp '/home/(*)/.bash_history' '~/user-bash/$1.txt'

다른 쉘에서는:

for x in /home/*/.bash_history; do
  u=${x%/*}; u=${u##*/}
  cp "$x" ~/user-bash/"$u.txt"
done

답변2

find두 개의 명령을 입력하여 모든 파일을 하나로 병합할 수 있습니다. 먼저 파일 이름(또는 전처리된 버전)을 출력한 다음 내용을 출력합니다.

find /home/ -maxdepth 2 -iname ".bash_history" -type f \
     -exec sh -c "echo {} >> combined.txt && cat {} >> combined.txt" \;

관련 정보