我以 root 身份运行。我想将系统 .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" \;