我是编程新手,刚开始接触bash。 我想要将文件夹和文件列表打印到一个txt文件中,并删除一些被打印的路径以使其更加清晰。 使用以下命令可以实现:
TODAY=$(date +"%Y-%m-%d")
cd
cd Downloads
ls -R ~/Music/iTunes/iTunes\ Media/Music | sed 's/\/Users\/BilPaLo\/Music\/iTunes\/iTunes\ Media\/Music\///g' > music-list-$TODAY.txt
但为了清理它,我想要使用变量,如下所示,
# Creates a string of the date, format YYYY-MM-DD
TODAY="$(date +"%Y-%m-%d")"
# Where my music folders are
MUSIC="$HOME/Music/iTunes/iTunes\ Media/Music/"
# Where I want it to go
DESTINATION="$HOME/Downloads/music-list-"$TODAY".txt"
# Path name to be removed from text file
REMOVED="\/Users\/BilPaLo\/Music\/iTunes\/iTunes\ Media\/Music\/"
ls -R "$MUSIC" > "$DESTINATION"
sed "s/$REMOVED//g" > "$DESTINATION"
但是它给我一个“没有这个文件或目录”的错误,我似乎无法避免。 我确定这段代码还有许多其他问题,但是这个问题我不理解。
sed
命令中添加文件名。 - Cyrusbash -x yourscript
是你的好朋友。比较它从脚本的错误和正常版本生成的日志,你就会看到问题所在。 - Charles Duffyfoo
或者bar
值中包含斜杠,请不要使用s/foo/bar/
这种写法 -- 只需要选择另一个定界符:s@foo@bar@
就可以在foo
和bar
中包含斜杠而无需转义。 - Charles DuffyMUSIC="$HOME/Music/iTunes/iTunes\ Media/Music/"
中的反斜杠是错误的。引号已经转义了空格,所以您不需要额外加上反斜杠。 - Charles Duffy