Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在Bash中列出每个文本文件的文件名,但不超过一个限制_Linux_Bash_Shell_Command Line - Fatal编程技术网

Linux 在Bash中列出每个文本文件的文件名,但不超过一个限制

Linux 在Bash中列出每个文本文件的文件名,但不超过一个限制,linux,bash,shell,command-line,Linux,Bash,Shell,Command Line,如何创建多个文本文件,包括特定目录中文件的文件名,每个文本文件最多可创建999行 我从这里开始: find ./J0902-405/*.evt -maxdepth 1 -type f -fprintf files_xselect.list %f\\n 它会在文本文件中正确地写入文件名。 但在后面,我需要设置999行限制,在该限制之后,创建另一个包含以下999个名称的文本文件,依此类推,直到列出所有*.evt文件。类似于 #!/bin/bash for file in ./J0902-405/

如何创建多个文本文件,包括特定目录中文件的文件名,每个文本文件最多可创建999行

我从这里开始:

find ./J0902-405/*.evt -maxdepth 1 -type f -fprintf files_xselect.list %f\\n
它会在文本文件中正确地写入文件名。 但在后面,我需要设置999行限制,在该限制之后,创建另一个包含以下999个名称的文本文件,依此类推,直到列出所有*.evt文件。

类似于

#!/bin/bash

for file in ./J0902-405/*.evt; do
  [[ $i > 999 ]] && i=0 && j=$((j+1))
  [[ -f $file ]] && i=$((i+1)) && echo "${file##*/}" >> "fileofnames$j.txt"
done
差不多

#!/bin/bash

for file in ./J0902-405/*.evt; do
  [[ $i > 999 ]] && i=0 && j=$((j+1))
  [[ -f $file ]] && i=$((i+1)) && echo "${file##*/}" >> "fileofnames$j.txt"
done

find./J0902-405/*.evt-maxdepth 1-类型f | split-l999-

从手册页面:

NAME
   split - split a file into pieces

SYNOPSIS
   split [OPTION]... [INPUT [PREFIX]]

DESCRIPTION
   Output  fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default size is 1000 
   lines, and default PREFIX is `x'.  With no INPUT, or when INPUT is -, read standard 
   input.

   -l, --lines=NUMBER
          put NUMBER lines per output file

find./J0902-405/*.evt-maxdepth 1-类型f | split-l999-

从手册页面:

NAME
   split - split a file into pieces

SYNOPSIS
   split [OPTION]... [INPUT [PREFIX]]

DESCRIPTION
   Output  fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default size is 1000 
   lines, and default PREFIX is `x'.  With no INPUT, or when INPUT is -, read standard 
   input.

   -l, --lines=NUMBER
          put NUMBER lines per output file

@DopeGhoti的答案是正确的,但让我来充实一下,对于那些新加入
拆分
(像我一样)的人来说:

  • -name…
    使用带引号的文件名模式,让find执行路径名扩展(与shell相反,让shell和
    find执行这项工作毫无意义)
  • -printf“%f\n”
    确保只输出文件名(无路径组件),如OP中所示
  • -l 999
    以行为单位指定拆分大小;默认值为1000
  • -d
    导致输出文件(
    00
    01
    ,…)使用数字后缀,而不是默认字母(
    aa
    ab
    ,…)[注:在OSX上不起作用];默认后缀长度为2;控制位数/字符数。在后缀中,使用
    -a{length}
  • -
    导致从stdin读取
    split
    ——在这种情况下,
    find
    的输出
  • 文件\u xselect.list.
    是输出文件前缀;因此,我们得到文件
    filesxselect.list.00
    filesxselect.list.01
如果希望对输出文件名进行更多控制,例如,将后缀数据移动到文件名的不同部分,则可以使用
--filter
选项(注意:在OS X上不起作用),该选项接受一个shell命令,每个文件的输出数据将通过管道传输到该命令,以及包含相应输出文件名名称的变量
$FILE
;这使您有机会根据它修改输出文件名:

例如,要创建名为
filesxselect.00.list的输出文件,…-i、 例如,要将后缀数据放在文件扩展名之前,可以使用:

... | split -l 999 -d --filter='> ${FILE}.list' - 'files_xselect.'

@DopeGhoti的答案是正确的,但让我来充实一下,对于那些新加入
拆分
(像我一样)的人来说:

  • -name…
    使用带引号的文件名模式,让find执行路径名扩展(与shell相反,让shell和
    find执行这项工作毫无意义)
  • -printf“%f\n”
    确保只输出文件名(无路径组件),如OP中所示
  • -l 999
    以行为单位指定拆分大小;默认值为1000
  • -d
    导致输出文件(
    00
    01
    ,…)使用数字后缀,而不是默认字母(
    aa
    ab
    ,…)[注:在OSX上不起作用];默认后缀长度为2;控制位数/字符数。在后缀中,使用
    -a{length}
  • -
    导致从stdin读取
    split
    ——在这种情况下,
    find
    的输出
  • 文件\u xselect.list.
    是输出文件前缀;因此,我们得到文件
    filesxselect.list.00
    filesxselect.list.01
如果希望对输出文件名进行更多控制,例如,将后缀数据移动到文件名的不同部分,则可以使用
--filter
选项(注意:在OS X上不起作用),该选项接受一个shell命令,每个文件的输出数据将通过管道传输到该命令,以及包含相应输出文件名名称的变量
$FILE
;这使您有机会根据它修改输出文件名:

例如,要创建名为
filesxselect.00.list的输出文件,…-i、 例如,要将后缀数据放在文件扩展名之前,可以使用:

... | split -l 999 -d --filter='> ${FILE}.list' - 'files_xselect.'

+我以前从未听说过split,每天都在学习一些知识。POSIX中有一个很好的真理,那就是大多数时候,已经有了用于作业的工具,用于
$job
的足够简单的值。(:+1以前从未听说过split,每天都在学习一些知识。POSIX中有一个非常重要的真理,即大多数时候,已经有了用于作业的工具,用于
$job
的足够简单的值(: