⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fixfiles.bash

📁 UNIX下SH的实现源码
💻 BASH
字号:
#! /bin/bash## From: c2a192@ugrad.cs.ubc.ca (Kazimir Kylheku)# Newsgroups: comp.unix.shell,comp.os.linux.misc# Subject: GNU Bash Script to fix filenames# Date: 28 Mar 1996 14:54:43 -0800# Organization: Computer Science, University of B.C., Vancouver, B.C., Canada##This is a script which takes a list of directories, descends through each one#and ``corrects'' filenames that:##   -	contain filename globbing characters: * ? [ ]#   -	quote characters: ' "#   -	control characters: 0-31 (127 is not dealt with---oops)#   -	- or + as the first character## The GNU version of 'tr' is required. Also requires 'sed'.## Script to process a given list of directories recursively# and rename each file to something that is reasonable.## The rules are:## 1. replace each space, [, ], *, ", and ' character in the name with a#    period.# 2. replace each control character 1..31 with a printable character obtained#    by adding 64 to the ascii value. ^A becomes A, ^B becomes B and so on.# 3. replace a - or + occuring at the beginning of the name with a ### 4. if the resulting name has been changed in any way, then# 5.    if a file of the new name already exists, then# 6.            add a . to the new name and goto step 5.# 7. rename the old name to the new name## written by Kaz Kylheku <kaz@cafe.net># March 1996# Vancouver, Canada## requires GNU 'bash', GNU 'tr', and some sort of 'sed' program.## minimal conversion to bash v2 syntax done by Chet Rameyprocessfile(){        new_name="`echo -n $1 | tr '\173\175\052\077\042\047 ' '.......' |                        tr '[\000-\037]' '[\100-\137]' |                        sed -e 's/^-/#/' -e 's/+/#/'`"        if [ "$new_name" != "$1" ] ; then                while [ -e "$new_name" ] ; do                        new_name="${new_name}."                done                echo changing \"$1\" to \"$new_name\" in `pwd`                mv -- "$1" "$new_name"        fi}processdir(){        set -f        local savepwd="$PWD"        if cd "$1" ; then                set +f                for file in * ; do                        set -f                        if [ "$file" != "." -a "$file" != ".." ] ; then                                if [ -L "$file" ] ; then                                        echo "skipping symlink" $file in `pwd`                                elif [ -d "$file" ] ; then                                        processdir "$file"                                elif [ -f "$file" ] ; then                                        processfile "$file"                                fi                        fi                done                cd "$savepwd"        fi}shopt -s nullglob dotglobif [ $# = 0 ] ; then        echo "$0: must specify a list of directories" >&2	echo "$0: usage: $0 directory [directory ...]" >&2	exit 2fiwhile [ $# != 0 ] ; do        processdir "$1"        shiftdoneexit 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -