Linux 使用bash中的脚本将某些文件的小写字符改为大写字符

Linux 使用bash中的脚本将某些文件的小写字符改为大写字符,linux,bash,shell,Linux,Bash,Shell,我正试图通过使用以下脚本将所有小写字符更改为大写字符来修改目录中的所有文件: #!/usr/bin/env bash for file in "/home/user/*" do tr '[:lower:]' '[:upper:]' < "$file" > "$file" done #/usr/bin/env bash 对于“/home/user/*”中的文件 做 tr'[:lower:]['[:upper:]['“$file” 完成 但是有了这个脚本,文件中的所有内容都被删

我正试图通过使用以下脚本将所有小写字符更改为大写字符来修改目录中的所有文件:

#!/usr/bin/env bash
for file in "/home/user/*"
do
   tr '[:lower:]' '[:upper:]' < "$file" > "$file"
done
#/usr/bin/env bash
对于“/home/user/*”中的文件
做
tr'[:lower:]['[:upper:]['<“$file”>“$file”
完成
但是有了这个脚本,文件中的所有内容都被删除了,我不明白为什么。

下面是tr的工作原理:

[blah@exchange ~]# echo "SOMEthing" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
SOMETHING
因此,您可以:

cat input-file.txt | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ > output-file.txt


不能将同一文件用作输入和输出。

您可以使用临时文件存储
tr
,然后将
mv
返回,如下所示:

#!/usr/bin/env bash
for file in "/home/user/*"
do
    tr '[:lower:]' '[:upper:]' < "$file" > tmp_file
    mv tmp_file "$file"
done
#/usr/bin/env bash
对于“/home/user/*”中的文件
做
tr'[:lower:]['[:upper:]['<“$file”>tmp_文件
mv tmp_文件“$file”
完成
#!/usr/bin/env bash
for file in "/home/user/*"
do
    tr '[:lower:]' '[:upper:]' < "$file" > tmp_file
    mv tmp_file "$file"
done