从 rclone 文件列表中删除文件大小

从 rclone 文件列表中删除文件大小

我使用rclone并且希望获得文件列表而不提及文件的大小。我找不到如何做到这一点,rclone所以我想用 awk 或类似的东西剥离它。我的输出看起来像这样

 59183070 fileserver/transfer_kimberly_2022-12-18_0558 (1).zip
     3690 fileserver/transfer_kimberly_2022-12-18_0558 (1).zip - Shortcut.lnk
 35961190 fileserver/transfer_2023-06-27_0814.zip
  7803667 fileserver/woodproject.zip
7437905920 Them/Data/Before_20230526132130642.FDB
1064525824 Them/Data/Updating_20220705231152059.FDB
1064525824 Them backup/Data/Updating_20220706231124156.FDB
1064525824 Them backup/Data/Updating_20220705231152059.FDB
1064525824 Them backup/Data/Updating_20220706231124156.FDB
  7004362 test.zip
  7004362 test (1).zip
  7803667 37939 37/Data/Updating_20220706231124156.FDB
  7803667 37939/Data/Updating_20220706231124156.FDB

剩下的第一个数字是文件大小。我想要这个输出

fileserver/transfer_kimberly_2022-12-18_0558 (1).zip
fileserver/transfer_kimberly_2022-12-18_0558 (1).zip - Shortcut.lnk
fileserver/transfer_2023-06-27_0814.zip
fileserver/woodproject.zip
Them/Data/Before_20230526132130642.FDB
Them/Data/Updating_20220705231152059.FDB
Them backup/Data/Updating_20220706231124156.FDB
Them backup/Data/Updating_20220705231152059.FDB
Them backup/Data/Updating_20220706231124156.FDB
test.zip
test (1).zip
37939 37/Data/Updating_20220706231124156.FDB
37939/Data/Updating_20220706231124156.FDB

我考虑过剥离space第一个之前的最后一个剩下的所有内容/。但space第一个目录或文件名中的 使事情变得复杂。感谢帮助

答案1

看来您的数据是基于行的。此外,该模式看起来是“零个或多个空格、一位或多个数字、一个空格”。编辑此类行的一种工具是sed

sed -E 's/^[[:space:]]*[[:digit:]]+[[:space:]]//'

我使用了字符类 ( [[...]]),但您也可以使用文字字符范围:

sed -E 's/^ *[0-9]+ //'

您可以在管道中使用sed或让它处理文件:

cmd_a | sed... | cmd_b
sed... {file}

答案2

您可以使用lsf子命令rclone列出文件和目录,但不列出文件大小。由于lsf默认情况下不递归,因此lsf -R如果需要递归列出目录,您可能需要使用。

如果您只想要以下路径文件(无目录),使用lsf -R —-files-only.您还可以使用 调整输出格式--format,并且存在多个用于更高级数据过滤的选项(请参阅rclone lsf —-help)。


为了方便下游实用程序进行解析,我建议使用rclone子命令的 JSON 输出lsjson

如果使用lsjson而不是lsor lsf,则使用(众所周知的 JSON 处理工具)从返回的 JSON 数组的每个元素中jq提取数据:Path

rclone lsjson -R someremote:somepath | jq -r '.[].Path'

请注意,lsjson默认情况下不会递归,因此我-R在此处将其与其选项一起使用。

如果您想避免列出目录,则仅选择其IsDir条目为的数组条目false

rclone lsjson -R someremote:somepath | jq -r 'map(select(.IsDir|not))[].Path'

(...或使用lsjson -R --files-only, 与 一样lsf。)


作为参考,lsjson将返回一个 JSON 对象数组,该数组看起来与此示例等效(使用您的数据作为模型):

{
  "Path": "Them/Data/Before_20230526132130642.FDB",
  "Name": "Before_20230526132130642.FDB",
  "Size": 7437905920,
  "MimeType": "application/octet-stream",
  "ModTime": "2023-09-04T20:10:54.367101898+02:00",
  "IsDir": false
}

答案3

使用 Perl

~$ perl -pe 's/^\s*\d+\s//;'  file

使用乐(以前称为 Perl_6)

~$ raku -pe 's/^ \s* \d+ \s //;'  file

上面是用 Perl 和 Raku 写的答案。 Perl/Raku-pe标志表示带有自动打印的逐行执行(-e对于单独的代码,-p对于逐行自动打印,即代码应用于每一行输入,不需要显式printput不必要)。 Raku 中的注释\d包括 ASCII 加 Unicode 数字。如果您想在 Raku 中仅使用 ASCII,请使用<+[0..9]>.


输入示例:

59183070 fileserver/transfer_kimberly_2022-12-18_0558 (1).zip
     3690 fileserver/transfer_kimberly_2022-12-18_0558 (1).zip - Shortcut.lnk
 35961190 fileserver/transfer_2023-06-27_0814.zip
  7803667 fileserver/woodproject.zip
7437905920 Them/Data/Before_20230526132130642.FDB
1064525824 Them/Data/Updating_20220705231152059.FDB
1064525824 Them backup/Data/Updating_20220706231124156.FDB
1064525824 Them backup/Data/Updating_20220705231152059.FDB
1064525824 Them backup/Data/Updating_20220706231124156.FDB
  7004362 test.zip
  7004362 test (1).zip
  7803667 37939 37/Data/Updating_20220706231124156.FDB
  7803667 37939/Data/Updating_20220706231124156.FDB

示例输出:

fileserver/transfer_kimberly_2022-12-18_0558 (1).zip
fileserver/transfer_kimberly_2022-12-18_0558 (1).zip - Shortcut.lnk
fileserver/transfer_2023-06-27_0814.zip
fileserver/woodproject.zip
Them/Data/Before_20230526132130642.FDB
Them/Data/Updating_20220705231152059.FDB
Them backup/Data/Updating_20220706231124156.FDB
Them backup/Data/Updating_20220705231152059.FDB
Them backup/Data/Updating_20220706231124156.FDB
test.zip
test (1).zip
37939 37/Data/Updating_20220706231124156.FDB
37939/Data/Updating_20220706231124156.FDB

https://perldoc.perl.org/perlre
https://docs.raku.org/language/regexes

相关内容