Ios 如何在文件夹中创建文件列表,并通过终端将列表中的每一行粘贴到*.plist中?

Ios 如何在文件夹中创建文件列表,并通过终端将列表中的每一行粘贴到*.plist中?,ios,bash,command-line,terminal,Ios,Bash,Command Line,Terminal,我在文件夹中有一些文件(扩展名为*.m4r) 我需要将它们的每个名称复制到另一个名称(扩展名为*.plist) 比如说, Folder=/Library/Ringtones 该文件夹中的文件: - name_of_first_file.m4r - name_of_second_file.m4r - name_of_third_file.m4r Plist(我们应该在其中添加此文件的名称): 这就是我在这个plist文件的末尾需要的: <string>system:name_

我在文件夹中有一些文件(扩展名为*.m4r) 我需要将它们的每个名称复制到另一个名称(扩展名为*.plist)

比如说,

Folder=/Library/Ringtones
该文件夹中的文件:

 - name_of_first_file.m4r
 - name_of_second_file.m4r
 - name_of_third_file.m4r
Plist(我们应该在其中添加此文件的名称):

这就是我在这个plist文件的末尾需要的:

<string>system:name_of_first_file</string>
<string>system:name_of_second_file</string>
<string>system:name_of_third_file</string>
while IFS= read -r line
do
    printf "%s\n" "$line"
    case "$line" in
        *"<array>"*)
            for file in *.m4r
            do_
                printf '       <string>system:%s</string>\n' "$file"
            done
            ;;
    esac
done >"$Plist.tmp" <"$Plist"
mv "$Plist.tmp" "$Plist"
系统:第一个文件的名称
系统:第二个文件的名称
系统:第三个文件的名称
我也不知道文件夹中有多少文件。 它可以有1个或2个,甚至100个

您能告诉我如何在终端中使用bash来实现这一点吗! 谢谢大家!


对John1024的回答 这个代码有效。谢谢

     #!/bin/bash
     cd /Library/Ringtones
     Plist="/System/Library/PrivateFrameworks/ToneKit.framework/TKRingtones.plist"
     for file in *.m4r; do printf '<string>system:%s</string>\n' "$file" ; done >>"$Plist"
     exit 0
#/bin/bash
cd/Library/Ringtones
Plist=“/System/Library/privateframes/ToneKit.framework/TKRingtones.Plist”
对于*.m4r中的文件;不打印“系统:%s\n”“文件”;完成>>“$Plist”
出口0

我还有一个问题。 1这是股票plist TKRingtones.plist(/System/Library/privatefframeworks/ToneKit.framework/)


经典
系统:解锁
系统:警报
系统:升序
现代的
系统:Apex
系统:信标
分类
如何使脚本(您建议的)将字符串粘贴到数组之后

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>classic</key>
        <array>
    <string>system:NAME_OF_FIRST_FILE</string> <<<<<<<<<<<<<<<ADD HERE 
    <string>system:NAME_OF_SECONDS_FILE</string> <<<<<<<<<<<<<<<ADD HERE
    <string>system:NAME_OF_THIRD_FILE</string> <<<<<<<<<<<<<<<ADD HERE
            <string>system:unlock</string>
            <string>system:Alarm</string>
            <string>system:Ascending</string>
        </array>
        <key>modern</key>
        <array>
            <string>system:Apex</string>
            <string>system:Beacon</string>
        </array>
        <key>sort</key>
        <true/>
    </dict>
    </plist>

经典
系统:第一个文件的名称

这应该适用于任何POSIX shell。

以后,尝试从一开始就将所有信息放入您的问题中

打印一组文件名相对比较容易,将它们插入到现有结构化文件的正确位置通常比较困难。我选择使用awk来进行插入;它在内部使用John1024脚本的变体来获取*.m4r文件名

#/usr/bin/env bash
#将“/Library/Ringtones”中的所有.m4r文件名复制到XML文件$Plist中
#2014年11月9日下午2点
Plist=“/System/Library/privateframes/ToneKit.framework/TKRingtones.Plist”
cd//图书馆/铃声”
#对当前Plist进行备份
cp-p“$Plist”“$Plist.bak”
#读取$Plist.bak,插入新的*.m4r名称
#在第一个标记之后,保存到$Plist
awk'
$1 == "" && ! 抄袭{
打印
while((((“for i in*.m4r;do echo${i%.m4r};done”| getline)>0)
printf“系统:%s\n”,$0
复制=1;下一个
}
{print}'“$Plist.bak”>“$Plist”
#查看修改后的文件以确保其正确
猫“$Plist”

您需要在包含.m4r文件的文件夹中运行John1024的脚本。因此,将
文件=“/Library/Ringtones”
行更改为
cd/Library/Ringtones
ok,它可以工作!谢谢我还剩下一件事:如何将所有这些行粘贴到现有代码中(现在这个脚本破坏了代码)
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>classic</key>
        <array>
    <string>system:NAME_OF_FIRST_FILE</string> <<<<<<<<<<<<<<<ADD HERE 
    <string>system:NAME_OF_SECONDS_FILE</string> <<<<<<<<<<<<<<<ADD HERE
    <string>system:NAME_OF_THIRD_FILE</string> <<<<<<<<<<<<<<<ADD HERE
            <string>system:unlock</string>
            <string>system:Alarm</string>
            <string>system:Ascending</string>
        </array>
        <key>modern</key>
        <array>
            <string>system:Apex</string>
            <string>system:Beacon</string>
        </array>
        <key>sort</key>
        <true/>
    </dict>
    </plist>
for file in *.m4r; do printf '<string>system:%s</string>\n' "$file" ; done >>"$Plist"
<string>system:name_of_first_file.m4r</string>
<string>system:name_of_second_file.m4r</string>
<string>system:name_of_third_file.m4r</string>
while IFS= read -r line
do
    printf "%s\n" "$line"
    case "$line" in
        *"<array>"*)
            for file in *.m4r
            do_
                printf '       <string>system:%s</string>\n' "$file"
            done
            ;;
    esac
done >"$Plist.tmp" <"$Plist"
mv "$Plist.tmp" "$Plist"