私は、別の拡張子(.md)に自動的に変換する1つの拡張子(この場合は.txt)のファイルでいっぱいのディレクトリを持っています。ディレクトリ内のすべてのファイルのファイル拡張子を変更するOSX
このディレクトリのすべてのファイルを別のファイル拡張子に変換するのに使用できる簡単な端末ライナーがありますか?
正規表現を使用してスクリプトを書く必要がありますか?
私は、別の拡張子(.md)に自動的に変換する1つの拡張子(この場合は.txt)のファイルでいっぱいのディレクトリを持っています。ディレクトリ内のすべてのファイルのファイル拡張子を変更するOSX
このディレクトリのすべてのファイルを別のファイル拡張子に変換するのに使用できる簡単な端末ライナーがありますか?
正規表現を使用してスクリプトを書く必要がありますか?
あなたはこのようなものを使用することができます
for old in *.txt; do mv $old `basename $old .txt`.md; done
は最初のコピーを作成します!
cd $YOUR_DIR
ls *.txt > abc
mkdir target // say i want to move it to another directory target in this case
while read line
do
file=$(echo $line |awk -F. '{ print $1 }')
cp $line target/$file.md // depends if u want to move(mv) or copy(cp)
done < abc
ターミナルは不要です...名前を変更するファイルをすべて強調表示してください。右クリックして "Rename ## items"を選択し、 "Find:"ボックスに ".txt"と入力し、 "Replace with:"ボックスに ".md"と入力します。あなたは
ren 'prefix_*.txt' 'prefix_#1.md'
これについては決して知りませんでした - ありがとう! –
うん。これは素晴らしかったです。ターミナルで 'open .'を実行してから、これを実行してください!ずっと簡単。 –
Whoa !!これについて決して知らなかった! – n13
また、あなたはren
(名前の変更)ユーティリティ
brew install ren
ren '*.txt' '#1.md'
をインストールすることができます上記の再利用のためのbash関数は次のとおりです。
function change_all_extensions() {
for old in *."$1"; do mv $old `basename $old ."$1"`."$2"; done
}
使用法:
$ change_all_extensions txt md
(。私はクリーンなコードがその答えにコメントの書式を取得する方法を見つけ出すことができませんでした)
選択し、最も正確な答えに基づいて、ファイル名に接頭辞や接尾辞を持つファイルの名前を変更したい場合は
これを行うための好適なUnixの道(はい、OS XのベースとなりますUNIXの場合)である:
ls | sed 's/^\(.*\)\.txt$/mv "\1.txt" "\1.md"/' | sh
ls
場合、ファイル名のリスト全体を通じて設計ループによってfor
とルーピングのはなぜ?あなたはパイプを持っています。コマンドだけでなく、コマンド(コマンドによって作成されたコマンド、これはUnixの発明者であるBrian KernighanがUnix上で最も好きだったコマンド)を使って出力を作成/変更することができます。 ls
とsed
がsh
へのパイプを除去することで生成します。
$ ls | sed 's/^\(.*\)\.txt$/mv "\1.txt" "\1.md"/'
mv "firstfile.txt" "firstfile.md"
mv "second file.txt" "second file.md"
$
あなたが見ることができるように、それだけでワンライナーではなく、さらに、出力として別のスクリプトを作成することによって動作し、完全なスクリプト。だから、単一行のスクリプトで作成されたスクリプトをsh
に送りましょう。 OS Xのスクリプトインタープリタです。もちろん、スペースが入ったファイル名に対しても機能します。
ところで:あなたはターミナルで何かを入力するたびに、あなたはそれがUnixのシェルでなどls
またはdate
すべてが実行されているような一言で唯一の単一のコマンドで、常にスクリプト/プログラムであっても、スクリプトを作成し、これはちょうどASCIIベースのストリーム(この場合、データストリームとは反対の命令ストリーム)です。
、sh
によって実行される実際のコマンドを参照してくださいちょうどシェルでデバッグ出力をオンにsh
後-x
オプションを追加するので、あなたはすべてのmv
コマンドはsed
エディタスクリプトによって渡された実引数で実行されて表示されますするには(ええと、スクリプト内の別のスクリプト:-))。
しかし、複雑さが気に入っている場合はawk
を使用することもできますし、基本的な作業を行うために他のプログラムをインストールしたい場合はren
があります。私は、この単純な毎日の仕事のために50行程度の文字を書くことを好む人でさえ、perl
スクリプトを知っています。
ファインダーでファイルの名前を変更する方が簡単かもしれませんが、Macにリモートで接続する場合(たとえばssh
経由)は、ファインダーを使用することはまったくできません。そのため、cmd行はまだ非常に便利です。それだけでこのコマンドを打つ
find ./ -name "*.txt" | xargs -I '{}' basename '{}' | sed 's/\.txt//' | xargs -I '{}' mv '{}.txt' '{}.md'
これはうまく動作します - 再帰的に行うには、 'ls'を 'find'に変更します。-name "* .txt" ' –
の必要はありません私は、ファイルが最後に.gifx.gif
名前が付けられ、これが最後の.gif
を削除するにはOS Xで働いていた同様の問題だった:
for old in *.gifx.gif; do
mv $(echo "$old") $(echo "$old" | sed 's/x.gif//');
done
のスクリプトを書くために
これは、名前のどこにでも 'x?gif'があれば(例えば、' maxsgift.gitx.git')、あなたが意図しているよりもいくつかのファイルを修正します。これは最高です: 'sed s/\。gif $ // ''。 – giusti
プログラミングに本当にうまくいかない人は、wiki howでこの記事をチェックできます。
コーディングを含まない多くの方法を示しています。
とchanging file extensionsでこのブログポストをチェックアウトすることができます。
すべての機能を実行するコンソールアプリケーションが含まれています。
そうですね。ありがとう –
マーベリックスでは、これは私のためには、この出力を与える動作しません: 使用法:mv [-f | -i | -n] [-v]ソースターゲット mv [-f | -i | -n] [-v] source ...ディレクトリ –
はMavericksで試してみましたが、正常に動作します。これは、デフォルトのシェルであるbashを使用していることを前提としています。 –