我有:
~/par1/
~/par2/*/*期望的结果:
~/par2/*/*.gz -> ~/par1/pmc_{}.gz
例如~/par2/par3/name.gz -> ~/par1/pmc_name.gz
例如,将~/par2/中的文件展平为~/par1/,并在文件名前加上一些前缀
注意:这是针对数百万个文件的,因此它必须是find
已尝试:
cd par2/
find . -name '*.gz' -maxdepth 2 -exec mv {} ../par1/pmc_{} \;得到:
mv: rename ./par2/par3/file.gz to ../par1/pmc_./par2/par3/file.gz: No such file or directory问题:
{}是文件路径,而不是文件名。
想法:
以某种方式让我的第二个mv参数使用basename
mv -t看起来很有前途,但我用的是zsh。
发布于 2021-04-09 15:51:11
由于您使用的是zsh,所以只需使用zmv
% autoload -Uz zmv # Add this to your .zshrc file, to not have to type it again.
% mkdir -p par1 par2/par3
% touch par2/par3/{0..9}.gz
% zmv -v 'par2/(*)/(*).gz' 'par1/pmc_$2.gz' # -v for verbose
mv -- par2/par3/0.gz par1/pmc_0.gz
mv -- par2/par3/1.gz par1/pmc_1.gz
mv -- par2/par3/2.gz par1/pmc_2.gz
mv -- par2/par3/3.gz par1/pmc_3.gz
mv -- par2/par3/4.gz par1/pmc_4.gz
mv -- par2/par3/5.gz par1/pmc_5.gz
mv -- par2/par3/6.gz par1/pmc_6.gz
mv -- par2/par3/7.gz par1/pmc_7.gz
mv -- par2/par3/8.gz par1/pmc_8.gz
mv -- par2/par3/9.gz par1/pmc_9.gz
%PS:
mv -t看起来很有前途,但我用的是zsh。
mv不是zsh内置的。它是你操作系统的一部分。
https://stackoverflow.com/questions/67015170
复制相似问题