如何在同一行中修订和剪切使用相同模式字符串列表?

问题描述

我打算编写一个脚本,该脚本根据文件名前缀收集文件,并将它们压缩在一起(当它们共享相同的前缀时)。 我没有前缀列表,我需要从文件名本身构建它。

文件的名称如下:

top-1.parquet
top-2.parquet
side-1.parquet
side-2.parquet
bot-tom-1.parquet
bot-tom-2.parquet
right-left-1.parquet
right-left-2.parquet

为此,我从此脚本开始。

RMT_PATH_DATA='/home/me/Documents/code/data'

while IFS= read -r -d $'\n' root_name
do
    # Work out tar here
    echo "Working file $root_name"
    ls "$root_name"*.parquet
done < <(find "$RMT_PATH_DATA" -maxdepth 1 -name "*.parquet" -print0 | rev | cut -f 2- -d '-' | rev | sort -zu)

(此脚本或多或少是从SO上的retained answer here复制而来的)

最后一行的逻辑是还原用find检索的文件名列表,并修剪文件名的数字和前缀。 修剪是通过首先反转文件名来进行的,使用cut从反转名称的第二个字段开始(-是字段定界符,并且前缀本身可以多次使用)

我的麻烦出现在revcut命令中。 find命令输出data目录中的实木复合地板文件列表,但是revcut似乎仅处理列表的第一项,而丢弃其他项。 / p>

请,我如何让他们处理完整列表?

感谢您的帮助! 最好的

PS:我尚未构建tar部分,仅执行echols来检查循环中正在处理的内容。由于存在麻烦,目前仅执行一次迭代。

解决方法

问题是您在查找中使用的-print0选项。那么找到的项目之间的传递者是NUL,而不是换行符。在How to concatenate files that have the same beginning of a name?中,使用带有-z选项的cut,这与-print0相对应。就我所知,rev命令没有使用NUL delemiter的选项。

,

好吧,如@Oliver Gaida所强调的,x = np.random.randint(0,10,size=(30,32,10000)) %timeit np.save('data.npy',x) %timeit np.load('data.npy') %timeit np.savez_compressed('data.npz',array=x) %timeit np.load('data.npz')['array'] 153 ms ± 42.1 ms per loop (mean ± std. dev. of 7 runs,10 loops each) 35.7 ms ± 3.59 ms per loop (mean ± std. dev. of 7 runs,10 loops each) 2.57 s ± 209 ms per loop (mean ± std. dev. of 7 runs,1 loop each) 163 ms ± 18.7 ms per loop (mean ± std. dev. of 7 runs,10 loops each) 遇到了麻烦。

我最终使用了似乎可以正常工作的以下代码(包括tar命令:))

print0

现在必须使用ssh运行它...

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...