如何通过 find 命令将所有文件一一重命名?
How to rename all files one by one through find command?
我想在 find 命令打印的每个文件中附加一个字符串。它在一个新行上打印每个文件。问题是每个文件都有一个唯一的字符串附加到它的名称上。这就是我需要它工作的方式
Run the find command
Print the first result
Have a read prompt for user to enter string , then append that string to the name.
Print the second result.
Have a read prompt .. then append that string to the second name
... and so on for all of the files
我试过使用 while 循环来做这个,虽然还没有成功
find . -type f -name 'file*' |
while IFS= read file_name; do
read -e -p "Enter your input : " string
mv "$file_name" "$file_name $string"
done
例如。假设原始文件名为 demo1.mp4 ,我在阅读提示中输入 'test' ,然后文件名应重命名为 'demo1 test.mp4' (在将字符串附加到之前应该有一个 space文件名结尾 )
您可以通过 Parameter Expansion 进行字符串切片,例如。
find . -type f -name 'file*' | {
while IFS= read file_name; do
name="${file_name%.*}"
ext="${file_name#*"$name"}"
read -e -p "Enter your input : " string </dev/tty
echo mv "$file_name" "$name $string$ext"
done
}
由于 while
循环中有两个 read
,读取 </dev/tty
是另一种解决方法,不确定它是否是 O.S。具体与否,但如果它可用 /dev/tty
那么它应该可以解决问题。
while loop
里面有两个read
除了用/dev/tty
还有一个办法就是用Process Substitution
while IFS= read -u9 file_name; do
name="${file_name%.*}"
ext="${file_name#*"$name"}"
read -e -p "Enter your input : " string
echo mv "$file_name" "$name $string$ext"
done 9< <(find . -type f -name 'file*')
如果您对输出满意,请删除 echo
。
这里有一些很好的例子Howto Parameter Expansion
Process Substitution的一些很好的例子。
我想在 find 命令打印的每个文件中附加一个字符串。它在一个新行上打印每个文件。问题是每个文件都有一个唯一的字符串附加到它的名称上。这就是我需要它工作的方式
Run the find command Print the first result Have a read prompt for user to enter string , then append that string to the name. Print the second result. Have a read prompt .. then append that string to the second name ... and so on for all of the files
我试过使用 while 循环来做这个,虽然还没有成功
find . -type f -name 'file*' |
while IFS= read file_name; do
read -e -p "Enter your input : " string
mv "$file_name" "$file_name $string"
done
例如。假设原始文件名为 demo1.mp4 ,我在阅读提示中输入 'test' ,然后文件名应重命名为 'demo1 test.mp4' (在将字符串附加到之前应该有一个 space文件名结尾 )
您可以通过 Parameter Expansion 进行字符串切片,例如。
find . -type f -name 'file*' | {
while IFS= read file_name; do
name="${file_name%.*}"
ext="${file_name#*"$name"}"
read -e -p "Enter your input : " string </dev/tty
echo mv "$file_name" "$name $string$ext"
done
}
由于 while
循环中有两个 read
,读取 </dev/tty
是另一种解决方法,不确定它是否是 O.S。具体与否,但如果它可用 /dev/tty
那么它应该可以解决问题。
while loop
里面有两个read
除了用/dev/tty
while IFS= read -u9 file_name; do
name="${file_name%.*}"
ext="${file_name#*"$name"}"
read -e -p "Enter your input : " string
echo mv "$file_name" "$name $string$ext"
done 9< <(find . -type f -name 'file*')
如果您对输出满意,请删除 echo
。
这里有一些很好的例子Howto Parameter Expansion
Process Substitution的一些很好的例子。