Я удивляюсь многим подобным ответам, которые полностью пропускают отметку.
После определения 3-х классов, которые были необходимы, читали, записывали и выполняли. Они пошли с восьмеричным (3 бита), чтобы свести к минимуму пространство, необходимое для управления файловой системой.
Было бы возможно сделать обе замены сразу с помощью sed, но это необязательно.
Вот как я решил бы эту проблему:
Поместить имена файлов в массив Iterate over array
filenames=(
'C:\Users\abcd\Downloads\testingFile.log'
# ... add more here ...
)
for f in "${filenames[@]}"; do
f="${f/C://c}"
f="${f//\\//}"
echo "$f"
done
Если вы хотите поместить вывод в массив вместо печати, замените строку echo на назначение:
filenames_out+=( "$f" )
Вы могли бы достичь этого в одной строке, используя sed
file="$(echo "$file" | sed -r -e 's|^C:|/c|' -e 's|\\|/|g')"
. Обратите внимание, что два шаблона должны оставаться раздельными, тем не менее, поскольку совпадения заменяются разными подстановками.
Вы могли бы достичь этого в одной строке, используя sed
file="$(echo "$file" | sed -r -e 's|^C:|/c|' -e 's|\\|/|g')"
. Обратите внимание, что два шаблона должны оставаться раздельными, тем не менее, поскольку совпадения заменяются разными подстановками.
Вы могли бы достичь этого в одной строке, используя sed
file="$(echo "$file" | sed -r -e 's|^C:|/c|' -e 's|\\|/|g')"
. Обратите внимание, что два шаблона должны оставаться раздельными, тем не менее, поскольку совпадения заменяются разными подстановками.
Вы могли бы достичь этого в одной строке, используя sed
file="$(echo "$file" | sed -r -e 's|^C:|/c|' -e 's|\\|/|g')"
. Обратите внимание, что два шаблона должны оставаться раздельными, тем не менее, когда совпадения заменяются разными подстановками.
Если это то, что вы хотите делать много раз, то почему бы не создать небольшую функцию оболочки?
win2lin () { f="${1/C://c}"; printf '%s\n' "${f//\\//}"; }
$ file='C:\Users\abcd\Downloads\testingFile.log'
$ win2lin "$file"
/c/Users/abcd/Downloads/testingFile.log
$
$ file='C:\Users\pqrs\Documents\foobar'
$ win2lin "$file"
/c/Users/pqrs/Documents/foobar
Вы могли бы достичь этого в одной строке, используя sed
file="$(echo "$file" | sed -r -e 's|^C:|/c|' -e 's|\\|/|g')"
. Обратите внимание, что два шаблона должны оставаться раздельными, тем не менее, поскольку совпадения заменяются разными подстановками.
Этот вопрос по-прежнему открыт для новых предложений? Если это так, помогло бы вам?
$ file="/$(echo 'C:\Users\abcd\Downloads\testingFile.log'|tr '\\' '/')"
$ echo $file
/C:/Users/abcd/Downloads/testingFile.log
О, и в случае, если C необходимо записать в нижний регистр:
file="/$(echo 'C:\Users\abcd\Downloads\testingFile.log'|tr '^C' 'c'|tr '\\' '/')"
В качестве обзора:
[ f3]Если это то, что вы хотите делать много раз, то почему бы не создать небольшую функцию оболочки?
win2lin () { f="${1/C://c}"; printf '%s\n' "${f//\\//}"; }
$ file='C:\Users\abcd\Downloads\testingFile.log'
$ win2lin "$file"
/c/Users/abcd/Downloads/testingFile.log
$
$ file='C:\Users\pqrs\Documents\foobar'
$ win2lin "$file"
/c/Users/pqrs/Documents/foobar
Этот вопрос по-прежнему открыт для новых предложений? Если это так, помогло бы вам?
$ file="/$(echo 'C:\Users\abcd\Downloads\testingFile.log'|tr '\\' '/')"
$ echo $file
/C:/Users/abcd/Downloads/testingFile.log
О, и в случае, если C необходимо записать в нижний регистр:
file="/$(echo 'C:\Users\abcd\Downloads\testingFile.log'|tr '^C' 'c'|tr '\\' '/')"
В качестве обзора:
$ file='C:\Users\abcd\Downloads\testingFile.log'
$ echo $file
C:\Users\abcd\Downloads\testingFile.log
$ file="/$(echo $file|tr '^C' 'c'|tr '\\' '/')"
$ echo $file
/c:/Users/abcd/Downloads/testingFile.log
Вы могли бы достичь этого в одной строке, используя sed
file="$(echo "$file" | sed -r -e 's|^C:|/c|' -e 's|\\|/|g')"
. Обратите внимание, что два шаблона должны оставаться раздельными, тем не менее, поскольку совпадения заменяются разными подстановками.
Если это то, что вы хотите делать много раз, то почему бы не создать небольшую функцию оболочки?
win2lin () { f="${1/C://c}"; printf '%s\n' "${f//\\//}"; }
$ file='C:\Users\abcd\Downloads\testingFile.log'
$ win2lin "$file"
/c/Users/abcd/Downloads/testingFile.log
$
$ file='C:\Users\pqrs\Documents\foobar'
$ win2lin "$file"
/c/Users/pqrs/Documents/foobar
Этот вопрос по-прежнему открыт для новых предложений? Если это так, помогло бы вам?
$ file="/$(echo 'C:\Users\abcd\Downloads\testingFile.log'|tr '\\' '/')"
$ echo $file
/C:/Users/abcd/Downloads/testingFile.log
О, и в случае, если C необходимо записать в нижний регистр:
file="/$(echo 'C:\Users\abcd\Downloads\testingFile.log'|tr '^C' 'c'|tr '\\' '/')"
В качестве обзора:
$ file='C:\Users\abcd\Downloads\testingFile.log'
$ echo $file
C:\Users\abcd\Downloads\testingFile.log
$ file="/$(echo $file|tr '^C' 'c'|tr '\\' '/')"
$ echo $file
/c:/Users/abcd/Downloads/testingFile.log
Вы могли бы добиться этого в одну строку, используя СЭД
file="$(echo "$file" | sed -r -e 's|^C:|/c|' -e 's|\\|/|g')"
обратите внимание на две модели должно оставаться тем не менее отдельные как спички заменяются различными замещениями.
Если это то, что вы хотите делать много раз, то почему бы не создать небольшую функцию оболочки?
win2lin () { f="${1/C://c}"; printf '%s\n' "${f//\\//}"; }
$ file='C:\Users\abcd\Downloads\testingFile.log'
$ win2lin "$file"
/c/Users/abcd/Downloads/testingFile.log
$
$ file='C:\Users\pqrs\Documents\foobar'
$ win2lin "$file"
/c/Users/pqrs/Documents/foobar
Этот вопрос по-прежнему открыт для новых предложений? Если это так, помогло бы вам?
$ file="/$(echo 'C:\Users\abcd\Downloads\testingFile.log'|tr '\\' '/')"
$ echo $file
/C:/Users/abcd/Downloads/testingFile.log
О, и в случае, если C необходимо записать в нижний регистр:
file="/$(echo 'C:\Users\abcd\Downloads\testingFile.log'|tr '^C' 'c'|tr '\\' '/')"
В качестве обзора:
$ file='C:\Users\abcd\Downloads\testingFile.log'
$ echo $file
C:\Users\abcd\Downloads\testingFile.log
$ file="/$(echo $file|tr '^C' 'c'|tr '\\' '/')"
$ echo $file
/c:/Users/abcd/Downloads/testingFile.log
Если это то, что вы хотите делать много раз, то почему бы не создать небольшую функцию оболочки?
win2lin () { f="${1/C://c}"; printf '%s\n' "${f//\\//}"; }
$ file='C:\Users\abcd\Downloads\testingFile.log'
$ win2lin "$file"
/c/Users/abcd/Downloads/testingFile.log
$
$ file='C:\Users\pqrs\Documents\foobar'
$ win2lin "$file"
/c/Users/pqrs/Documents/foobar
Этот вопрос по-прежнему открыт для новых предложений? Если это так, помогло бы вам?
$ file="/$(echo 'C:\Users\abcd\Downloads\testingFile.log'|tr '\\' '/')"
$ echo $file
/C:/Users/abcd/Downloads/testingFile.log
О, и в случае, если C необходимо записать в нижний регистр:
file="/$(echo 'C:\Users\abcd\Downloads\testingFile.log'|tr '^C' 'c'|tr '\\' '/')"
В качестве обзора:
$ file='C:\Users\abcd\Downloads\testingFile.log'
$ echo $file
C:\Users\abcd\Downloads\testingFile.log
$ file="/$(echo $file|tr '^C' 'c'|tr '\\' '/')"
$ echo $file
/c:/Users/abcd/Downloads/testingFile.log
Если это то, что вы хотите делать много раз, то почему бы не создать небольшую функцию оболочки?
win2lin () { f="${1/C://c}"; printf '%s\n' "${f//\\//}"; }
$ file='C:\Users\abcd\Downloads\testingFile.log'
$ win2lin "$file"
/c/Users/abcd/Downloads/testingFile.log
$
$ file='C:\Users\pqrs\Documents\foobar'
$ win2lin "$file"
/c/Users/pqrs/Documents/foobar
Этот вопрос по-прежнему открыт для новых предложений? Если это так, помогло бы вам?
$ file="/$(echo 'C:\Users\abcd\Downloads\testingFile.log'|tr '\\' '/')"
$ echo $file
/C:/Users/abcd/Downloads/testingFile.log
О, и в случае, если C необходимо записать в нижний регистр:
file="/$(echo 'C:\Users\abcd\Downloads\testingFile.log'|tr '^C' 'c'|tr '\\' '/')"
В качестве обзора:
$ file='C:\Users\abcd\Downloads\testingFile.log'
$ echo $file
C:\Users\abcd\Downloads\testingFile.log
$ file="/$(echo $file|tr '^C' 'c'|tr '\\' '/')"
$ echo $file
/c:/Users/abcd/Downloads/testingFile.log
Если это то, что вы хотите делать много раз, то почему бы не создать небольшую функцию оболочки?
win2lin () { f="${1/C://c}"; printf '%s\n' "${f//\\//}"; }
$ file='C:\Users\abcd\Downloads\testingFile.log'
$ win2lin "$file"
/c/Users/abcd/Downloads/testingFile.log
$
$ file='C:\Users\pqrs\Documents\foobar'
$ win2lin "$file"
/c/Users/pqrs/Documents/foobar