我有一些文件嵌套在文件夹中,如果文件名是以重复两次的字符串开头,我想把文件名改为只出现一次的名称。如果文件名的开头是一个重复两次的字符串,我想把文件名改成这个字符串只出现一次的名字。
例如,我想把文件名改成
如何在Linux中使用命令行?
我结合了 @Barmar 的 regex 和 @U880D 的 shell 脚本来递归删除文件名中任何重复的前缀。在使用 find
和 perl-rename
所以我不得不这样做。
#!/bin/bash
shopt -s globstar;
for DIR in ${PWD}/**/; do
cd "${DIR}"
for FILENAME in *.mp3 ; do
NEWFILENAME=$(echo "${FILENAME}" | perl -pe 's/^(.*)\1/\1/')
if [ "${FILENAME}" != "${NEWFILENAME}" ] ; then
mv "${FILENAME}" "${NEWFILENAME}"
fi
done
done
如何在Linux系统中使用命令行来做这件事?
经过研究,似乎比较复杂。因此,它可能会最终在一个脚本。
renameMusic.sh
#!/bin/bash
DIRECTORY=$1
cd ${DIRECTORY}
echo "Normalize filenames in $(pwd)"
for FILENAME in *; do
echo
echo "Checking file ${FILENAME}"
# Count number of dash (-)
NUMBER=$(grep -o '-' <<< ${FILENAME} | wc -l)
echo "Found ${NUMBER} of dash (-)"
# Check if the artist name seems to be there twice
if [[ "${NUMBER}" -eq 2 ]]; then
# If so, remove the double part
NEWFILENAME=$(echo "${FILENAME}" | cut -d "-" -f 2- | sed -e 's/^[[:space:]]*//')
echo "Going to move to new name ${NEWFILENAME}"
# mv ${FILENAME} ${NEWFILENAME}
fi
done
感谢