我使用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
而不是ls
or 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
对于逐行自动打印,即代码应用于每一行输入,不需要显式print
或put
不必要)。 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