Ios 如何在文件夹中创建文件列表,并通过终端将列表中的每一行粘贴到*.plist中?
我在文件夹中有一些文件(扩展名为*.m4r) 我需要将它们的每个名称复制到另一个名称(扩展名为*.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_
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"